Spring中的注解主要分為兩類:
類級別的注解:如@Component、@Repository、@Controller、@Service以及JavaEE6的@ManagedBean和@Named注解,都是添加在類上面的類級別注解。
類內部的注解:如@Autowire、@Value、@Resource以及EJB和WebService相關的注解等,都是添加在類內部的字段或者方法上的類內部注解。
具體的來說又有以下幾種類型的注解方式:
1.聲明bean的注解
@Component 組件,通用的注解方式
@Service 在業務邏輯層使用(service層)
@Repository 在數據訪問層使用(dao層)
@Controller 在表現層使用,控制器的聲明(C)
2.注入bean的注解
@Autowired:由Spring提供
@Inject:由JSR-330提供
@Resource:由JSR-250提供
都可以注解在set方法和屬性上,推薦注解在屬性上(一目了然,少寫代碼)。
3.java配置類相關注解
@Configuration 聲明當前類為配置類,相當於xml形式的Spring配置(類上)
@Bean 注解在方法上,聲明當前方法的返回值為一個bean,替代xml中的方式(方法上)
@Configuration 聲明當前類為配置類,其中內部組合了@Component注解,表明這個類是一個bean(類上)
@ComponentScan 用於對Component進行掃描,相當於xml中的(類上)
@WishlyConfiguration 為@Configuration與@ComponentScan的組合注解,可以替代這兩個注解
4.切面(AOP)相關注解
Spring支持AspectJ的注解式切面編程。
@Aspect 聲明一個切面(類上)
使用@After、@Before、@Around定義建言(advice),可直接將攔截規則(切點)作為參數。
@After 在方法執行之后執行(方法上) @Before 在方法執行之前執行(方法上) @Around 在方法執行之前與之后執行(方法上)
@PointCut 聲明切點
在java配置類中使用@EnableAspectJAutoProxy注解開啟Spring對AspectJ代理的支持(類上)
5.@Bean的屬性支持
@Scope 設置Spring容器如何新建Bean實例(方法上,得有@Bean)
其設置類型包括:
· Singleton (單例,一個Spring容器中只有一個bean實例,默認模式),
· Protetype (每次調用新建一個bean),
· Request (web項目中,給每個http request新建一個bean),
· Session (web項目中,給每個http session新建一個bean),
· GlobalSession(給每一個 global http session新建一個Bean實例)
@StepScope 在Spring Batch中還有涉及
@PostConstruct 由JSR-250提供,在構造函數執行完之后執行,等價於xml配置文件中bean的initMethod
@PreDestory 由JSR-250提供,在Bean銷毀之前執行,等價於xml配置文件中bean的destroyMethod