spring-boot使用了大量的注解來進行開發(fā),
Application類,是spring-boot的啟動類,
@SpringBootApplication 申明讓spring boot自動給程序進行必要的配置等同于:@Configuration ,@EnableAutoConfiguration 和 @ComponentScan 三個配置。其中@ComponentScan讓spring Boot掃描到Configuration類并把它加入到程序上下文。
@SpringBootApplication
public class FeedApplication {
public static void main(String[] args) {
SpringApplication.run(FeedApplication.class, args);
}
}
SpringApplication.run(FeedApplication.class, args);
該方法就是用來啟動項目的。
@Configuration 等同于spring的XML配置文件;使用Java代碼可以檢查類型安全。
示例代碼:
@Configuration
@PropertySource("classpath:/database.properties")
public class DataBaseConfig {
@Bean
@ConfigurationProperties(prefix = "notice.datasource")
public DataSource noticeDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
public JdbcTemplate noticeJDBCTemplate() {
return new JdbcTemplate(noticeDataSource());
}
}
這個就是用來配置數(shù)據(jù)庫的配置。添加@Configuration 以后, spring-boot啟動的時候,就會自動識別這個使用配置文件,然后就會自動加載配置。
@PropertySource("classpath:/database.properties")這個是用來定于配置文件的位置,如果沒有添加這個注解的話,就會默認去application.ConfigurationPropertie中進行查找。
@Controller:用于定義控制器類,在spring 項目中由控制器負責將用戶發(fā)來的
URL請求轉發(fā)到對應的服務接口(service層),一般這個注解在類中,
通常方法需要配合注解@RequestMapping(提供路由信息,負責URL到Controller
中的具體函數(shù)的映射)。
示例代碼:
@Controller
@RequestMapping("/feed/notice")
public class FeedController {
@Autowired ()
private FeedGetService feedGetService;
@Autowired
private FeedPublishService publishService;
/**
* 獲取用戶的個人消息以及系統(tǒng)消息的條數(shù)
*/
@RequestMapping("/getNoticeNum")
@ResponseBody
public Object getNoticeNum(@RequestParam final String user, @RequestParam final String locale,
@RequestParam final String area, @RequestParam final String channel,
@RequestParam final String version) {
GetUserNoticeNum userNoticeNum = feedGetService.getNoticeNum(user, locale, area, channel, version);
return new ResponseResult<>(userNoticeNum).success();
}
}
@EnableAutoConfiguration 自動配置。
Spring Boot自動配置(auto-configuration):嘗試根據(jù)你添加的jar依賴自動配置你的
Spring 應用。例如,如果你的classpath下存在HSQLDB,
并且你沒有手動配置任何數(shù)據(jù)庫連接beans,
那么我們將自動配置一個內存型(in-memory)數(shù)據(jù)庫”。
你可以將@EnableAutoConfiguration 或者@SpringBootApplication
注解添加到一個@Configuration 類上來選擇自動配置。如果發(fā)現(xiàn)應用了你
不想要的特定自動配置類,你可以使用@EnableAutoConfiguration
注解的排除屬性來禁用它們
@ComponentScan 組件掃描,可自動發(fā)現(xiàn)和裝配一些Bean。
表示將該類自動發(fā)現(xiàn)掃描組件。如果掃描到有@Component、@Controller、@Service 等這些注解的類,并注冊為Bean,
可以自動收集所有的Spring組件,包括@Configuration類。
我們經常使用@ComponentScan 注解搜索beans,并結合@Autowired 注解導入。
如果沒有配置的話,Spring Boot 會掃描啟動類所在包下以及子
包下的使用了@Service,@Repository 等注解的類。(我的項目中就沒有進行配置。)
@Component 可配合CommandLineRunner使用,在程序啟動后執(zhí)行一些基礎任務。
@RestController 注解是 @Controller 和 @ResponseBody 的合集,
表示這是個控制器bean,并且是將函數(shù)的返回值直
接填入HTTP響應體中,是REST風格的控制器。
@Autowired:自動導入依賴的bean 。把配置好的Bean拿來用,完成屬性、方法的組裝,
它可以對類成員變量、方法及構造函數(shù)進行標注,完成自動裝配的工作。
當加上(required=false)時,就算找不到bean也不報錯。
@Component:泛指組件,當組件不好歸類的時候,我們可以使用這個注解進行標注。
@Service:一般用于修飾service層的組件
@Bean:用@Bean 標注方法等價于XML中配置的bean。放在方法的上面,而不是類,
意思是產生一個bean,并交給spring管理。
@PathVariable 獲取參數(shù)。
@Value:注入Spring boot application.properties配置的屬性的值。
示例代碼:
@Value("${send.sms.byecomm}")
private String sendSMSByEcomm;
application.properties配置文件中配置的是 send.sms.byecomm=http://iran.java.dicepay
spring boot 就會自動將值賦給sendSMSByEcomm,我們調用sendSMSByEcomm就可以了。
@Repository:使用@Repository 注解可以確保DAO或者repositories 提供異常轉譯,
這個注解修飾的DAO或者repositories類會被ComponetScan發(fā)現(xiàn)并配置,
同時也不需要為它們提供XML配置項。
示例代碼:
@Repository
public class FeedRedisDao {
@Resource
private StringRedisTemplate feedRedisTemplate;
public void setGetSysNotice(String user, int noticeId, int day) {
String key = "getSysNotice_" + user + "_" + noticeId;
feedRedisTemplate.opsForValue().set(key, user, day, TimeUnit.DAYS);
}
}
@Qualifier:當有多個同一類型的Bean時,可以用@Qualifier(“name”)來指定。
與@Autowired 配合使用。@Qualifier 限定描述符除了能根據(jù)名字進行注入,
但能進行更細粒度的控制如何選擇候選者,具體使用方式如下:
示例代碼:
@Configuration
@PropertySource("classpath:/database.properties")
public class DataBaseConfig {
@Bean(name = "npsDataSource")
@Primary
@ConfigurationProperties(prefix = "integration.datasource")
public DataSource npsDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "npsJDBCTemplate")
public JdbcTemplate npsJDBCTemplate(@Qualifier("npsDataSource") DataSource npsDataSource) {
return new JdbcTemplate(npsDataSource);
}
@Bean(name = "iranDataSource")
@ConfigurationProperties(prefix = "iran.datasource")
public DataSource iranDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "iranJDBCTemplate")
public JdbcTemplate iranJDBCTemplate(@Qualifier("iranDataSource") DataSource iranDataSource) {
return new JdbcTemplate(iranDataSource);
}
}
示例代碼中展示的是兩個數(shù)據(jù)的配置,為了能讓數(shù)據(jù)庫加載正確,所以每一個bean都定義了名稱。
spring-boot啟動的時候會默認加載一個數(shù)據(jù)庫配置,但是配置兩個的時候spring-boot
就會不知道該加載那個數(shù)據(jù)庫而報錯,所以需要@Primary 注解,@Primary 表示默認加載
哪一個配置。這樣在啟動的時候就會默認加載npsDataSource這個數(shù)據(jù)庫,然后當你使用iranDataSource
的時候就會自動加載進來,
@Resource(name=”name”,type=”type”):與@Autowired 干類似的事
對于spring-boot 的配置文件有.yml和.properties兩種,
.yml的寫法
server:
port: 8080
address: localhost
iran:
datasource:
url: dbc:mysql://localhost:3306/asset
username: root
password: root
.properties的寫法
server.port=8080
iran.datasource.url=jdbc:mysql://localhost:3306/asset
iran.datasource.username=root
iran.datasource.password=root