jar包:common-annotations.jar
命名空間:引入context 的 Schema命名空間 在配置文件中添加context:annotation-config
標籤
配置掃描註解:<context:component-scan/>
掃描過濾方式java
過濾器類型 | 說明 |
---|---|
註釋 | 假如 com.baobaotao.SomeAnnotation 是一個註釋類,咱們能夠將使用該註釋的類過濾出來。 |
類名指定 | 經過全限定類名進行過濾,如您能夠指定將 com.baobaotao.Boss 歸入掃描,而將 com.baobaotao.Car 排除在外。 |
正則表達式 | 經過正則表達式定義過濾的類,以下所示: com\.baobaotao\.Default.* |
AspectJ 表達式 | 經過 AspectJ 表達式定義過濾的類,以下所示: com. baobaotao..*Service+ |
值得注意的是 <context:component-scan/>
配置項不但啓用了對類包進行掃描以實施註釋驅動 Bean 定義的功能,同時還啓用了註釋驅動自動注入的功能(即還隱式地在內部註冊了AutowiredAnnotationBeanPostProcessor 和 CommonAnnotationBeanPostProcessor
),所以當使用 <context:component-scan/>
後,就能夠將 <context:annotation-config/>
移除了。web
<context:component-scan base-package="controller.*" />
<context:component-scan base-package="controller.**" />
**匹配任意class文件和包,而*只能匹配包,所以沒法掃描到包下的類,所以也就沒法被Spring管理。正則表達式
聲明bean的註解
@Controller用於標註控制層組件(如struts中的action) 默認的bean名字爲這個類的類名首字母小寫
@Service用於標註業務層組件,
@Repository用於標註數據訪問組件,即DAO組件,
@Component一個標準普通的spring Bean類,泛指組件,當組件很差歸類的時候,咱們可使用這個註解進行標註。主要用於工具類 不推薦spring
@RestController
Spring4以後加入的註解,原來在@Controller中返回json須要@ResponseBody來配合,若是直接用@RestController替代@Controller就不須要再配置@ResponseBody,默認返回json格式。編程
@RestController註解下返回到jsp視圖頁面json
@RequestMapping(value="/tologin", method=RequestMethod.GET) public ModelAndView login(){ ModelAndView mv = new ModelAndView("index"); return mv; }
注入bean的註解
@Autowired(Spring提供) 默認按類型裝配
,若是咱們想使用按名稱裝配,能夠結合@Qualifier註解一塊兒使用
@Resource(JSR-250提供) 默認按名稱裝配
,當找不到與名稱匹配的bean纔會按類型裝配。
@Inject(JSR-330提供) 根據類型進行自動裝配
的,若是須要按名稱進行裝配,則須要配合 @Named
均可以註解在set方法和屬性上,推薦註解在屬性上(一目瞭然,少寫代碼)緩存
java配置類相關注解
@Configuration 聲明當前類爲配置類,至關於xml形式的Spring配置(類上)
@Bean 註解在方法上,聲明當前方法的返回值爲一個bean,替代xml中的方式(方法上)
@Configuration 聲明當前類爲配置類,其中內部組合了@Component註解,代表這個類是一個bean(類上)
@ComponentScan 用於對Component進行掃描,至關於xml中的(類上)
@WishlyConfiguration 爲@Configuration與@ComponentScan的組合註解,能夠替代這兩個註解cookie
切面(AOP)相關注解
Spring支持AspectJ的註解式切面編程。
@Aspect 聲明一個切面(類上)
使用@After、@Before、@Around定義建言(advice),可直接將攔截規則(切點)做爲參數。session
@After 在方法執行以後執行(方法上)
@Before 在方法執行以前執行(方法上)
@Around 在方法執行以前與以後執行(方法上)app
@PointCut 聲明切點
在java配置類中使用@EnableAspectJAutoProxy註解開啓Spring對AspectJ代理的支持(類上)
@Bean的屬性支持
- @Scope用於指定scope做用域的(用在類上)
其設置類型包括:-
singleton (單例,一個Spring容器中只有一個bean實例, 默認模式)
-
protetype (每次調用新建一個bean), 多實例模式 每次獲取Bean的時候會有一個新的實例
-
request (web項目中,給每一個http request新建一個bean),
-
session (web項目中,給每一個http session新建一個bean), 表示在每個session中只有一個該對象
-
globalSession(給每個 global http session新建一個Bean實例)
-
註解格式:
@scope("prototype")
-
xml格式
-
<bean id="role" class="spring.chapter2.maryGame.Role" scope="singleton"/> 或者 <bean id="role" class="spring.chapter2.maryGame.Role" singleton="true"/>
@PostConstruct 由JSR-250提供,在構造函數執行完以後執行,等價於xml配置文件中bean的initMethod
@PreDestory 由JSR-250提供,在Bean銷燬以前執行,等價於xml配置文件中bean的destroyMethod
@Lazy(true) 表示延遲初始化
@Value註解
@Value 爲屬性注入值(屬性上)
注入普通字符:@Value("Michael Jackson")String name;
注入操做系統屬性:@Value("#{systemProperties['os.name']}")String osName;
注入表達式結果:@Value("#{ T(java.lang.Math).random() * 100 }") String randomNumber;
注入其它bean屬性:@Value("#{domeClass.name}")String name;
注入文件資源:@Value("classpath:com/hgs/hello/test.txt")String Resource file;
注入網站資源:@Value("http://www.cznovel.com")Resource url;
注入配置文件:Value("${book.name}")String bookName;
注入配置使用方法:
① 編寫配置文件(test.properties): book.name=《三體》
② @PropertySource 加載配置文件(類上)
@PropertySource("classpath:com/hgs/hello/test/test.propertie")
③ 還需配置一個PropertySourcesPlaceholderConfigurer的bean
。
環境切換
@Profile 經過設定Environment的ActiveProfiles來設定當前context須要使用的配置環境。(類或方法上)
@Conditional Spring4中可使用此註解定義條件話的bean,經過實現Condition接口,並重寫matches方法,從而決定該bean是否被實例化。(方法上)
異步相關
@EnableAsync 配置類中,經過此註解開啓對異步任務的支持,敘事性AsyncConfigurer接口(類上)
@Async 在實際執行的bean方法使用該註解來申明其是一個異步任務(方法上或類上全部的方法都將異步,須要@EnableAsync開啓異步任務)
定時任務相關
@EnableScheduling 在配置類上使用,開啓計劃任務的支持(類上)
@Scheduled 來申明這是一個任務,包括cron,fixDelay,fixRate等類型(方法上,需先開啓計劃任務的支持)
@Enable*註解說明
這些註解主要用來開啓對xxx的支持。
@EnableAspectJAutoProxy 開啓對AspectJ自動代理的支持
@EnableAsync 開啓異步方法的支持
@EnableScheduling 開啓計劃任務的支持
@EnableWebMvc 開啓Web MVC的配置支持
@EnableConfigurationProperties 開啓對@ConfigurationProperties註解配置Bean的支持
@EnableJpaRepositories 開啓對SpringData JPA Repository的支持
@EnableTransactionManagement 開啓註解式事務的支持
@EnableTransactionManagement 開啓註解式事務的支持
@EnableCaching 開啓註解式的緩存支持
測試相關注解
@RunWith 運行器,Spring中一般用於對JUnit的支持
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration 用來加載配置ApplicationContext,其中classes屬性用來加載配置類
@ContextConfiguration(classes={TestConfig.class})
事務管理
@Transactional( rollbackFor={Exception.class}) 事務管理
SpringMVC部分
@EnableWebMvc 在配置類中開啓Web MVC的配置支持,如一些ViewResolver或者MessageConverter等,若無此句,重寫WebMvcConfigurerAdapter方法(用於對SpringMVC的配置)。
@Controller 聲明該類爲SpringMVC中的Controller
@RequestMapping 用於映射Web請求,包括訪問路徑和參數(類或方法上)
@ResponseBody 支持將返回值放在response內,而不是一個頁面,一般用戶返回json數據(返回值旁或方法上)
@RequestBody 容許request的參數在request體中,而不是在直接鏈接在地址後面。(放在參數前)
@PathVariable 用於接收路徑參數,好比@RequestMapping(「/hello/{name}」)申明的路徑,將註解放在參數中前,便可獲取該值,一般做爲Restful的接口實現方法。
@RestController 該註解爲一個組合註解,至關於@Controller和@ResponseBody的組合,註解在類上,意味着,該Controller的全部方法都默認加上了@ResponseBody。
@ControllerAdvice 經過該註解,咱們能夠將對於控制器的全局配置放置在同一個位置,註解了 @Controller的類的方法可以使用@ExceptionHandler、@InitBinder、@ModelAttribute註解到方法上,
這對全部註解了 @RequestMapping的控制器內的方法有效。
@ExceptionHandler 用於全局處理控制器裏的異常
@InitBinder 用來設置WebDataBinder,WebDataBinder用來自動綁定前臺請求參數到Model中。
@ModelAttribute 原本的做用是綁定鍵值對到Model裏,在@ControllerAdvice中是讓全局的 @RequestMapping都能得到在此處設置的鍵值對。
主要有兩種使用方式,一種是標註在方法上,一種是標註在 Controller 方法參數上。
@CookieValue 綁定了cookie 的值到方法參數上
@SessionAttributes 傳遞和保存數據
@RequestHeader 註解綁定 HttpServletRequest 頭信息到 Controller 方法參數
@RequestParam 用於將請求參數區數據映射到功能處理方法的參數上
public Resp test(@RequestParam Integer id){ return Resp.success(customerInfoService.fetch(id)); }
這個id就是要接收從接口傳遞過來的參數id的值的,若是接口傳遞過來的參數名和你接收的不一致,也能夠以下
public Resp test(@RequestParam(value="course_id") Integer id){ return Resp.success(customerInfoService.fetch(id)); }
其中course_id就是接口傳遞的參數,id就是映射course_id的參數名
Spring 4.2新特性-使用@Order調整配置類加載順序
lombok 簡化java代碼註解 @Data :註解在類上;提供類全部屬性的 getting 和 setting 方法,此外還提供了equals、canEqual、hashCode、toString 方法 @Setter:註解在屬性上;爲屬性提供 setting 方法 @Getter:註解在屬性上;爲屬性提供 getting 方法 @Log4j :註解在類上;爲類提供一個 屬性名爲log 的 log4j 日誌對象 @NoArgsConstructor:註解在類上;爲類提供一個無參的構造方法 @AllArgsConstructor:註解在類上;爲類提供一個全參的構造方法