spring 註解零配置概略(轉載)
我們在以前學習Spring的時候,其所有的配置資訊都寫在applicationContext.xml裡,大致示例如下:
java程式碼:
- <beans>
- <bean name="ds" class="org.apache.commons.dbcp.BasicDataSource">
- <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
- <property name="url" value="jdbc:oracle:thin:@localhost:1521:wangbin"/>
- <property name="username" value="tech37"/>
- <property name="password" value="tech37"/>
- </bean>
- <bean name="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
- <property name="dataSource" ref="ds"/>
- </bean>
- <tx:advice id="txAdvice" transaction-manager="txManager">
- <tx:attributes>
- <tx:method name="get*" read-only="true"/>
- <tx:method name="*"/>
- </tx:attributes>
- </tx:advice>
- <aop:config>
- <aop:advisor advice-ref="txAdvice"
- pointcut="execution(* cn.javass..business.ebo.*Ebo.*(..))"/>
- </aop:config>
- </beans>
<beans>
<bean name="ds" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:wangbin"/>
<property name="username" value="tech37"/>
<property name="password" value="tech37"/>
</bean>
<bean name="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="ds"/>
</bean>
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="get*" read-only="true"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:advisor advice-ref="txAdvice"
pointcut="execution(* cn.javass..business.ebo.*Ebo.*(..))"/>
</aop:config>
</beans>
在上面的示例中,我們可以典型的看到Spring的三種功能:
1、IoC容器,如:
<bean …>
<property…/>
</bean>
2、AOP
<aop:config/>
3、事務
<tx:advice/>
首先我們學習如何使用註解來構造IoC容器。
用註解來向Spring容器註冊Bean。需要在applicationContext.xml中註冊<context:component-scan base-package=“cn.javass”/>。表明cn.javass包及其子包中,如果某個類的頭上帶有特定的註解【@Component/@Repository/@Service/@Controller】,就會將這個物件作為Bean註冊進Spring容器。
以上的4個註解,用法完全一摸一樣,只有語義上的區別。
@Component 是所有受Spring 管理元件的通用形式,Spring 還提供了更加細化的註解形式: @Repository 、@Service 、@Controller ,它們分別對應資料層Bean ,業務層Bean ,和表現層Bean 。
其中,@Component不推薦使用。
這四個註解都可以放在類的頭上,如果不指定其value【@Service】,則預設的bean名字為這個類的簡單類名首字母小寫;如果指定value【@Service(“dao”)】,則使用value作為ban名字。
注意:如果cn.javass.SampleDao和cn.javass1.SampleDao都只用@Service註解,而不指定value會發生什麼事?
除了註冊Bean之外,還可以通過在<bean>上設定屬性來控制Bean的其他屬性,比如:
<bean name="" class=""
lazy-init=“true” //是否延遲初始化
scope=“prototype” //bean的生命週期
depends-on=“其他bean“ //依賴其他bean
/>
在Spring中也有相應的註解去對應
@Lazy
@Scope
@DependsOn
他們都是放在類的頭上。
除了註冊Bean之外,還可以通過在<bean>上設定屬性來控制Bean的初始化方法和析構方法,比如:
<bean name="" class=""
init-method=“init“ //初始化方法
destroy-method=“close“ //析構方法
/>
在Spring中也有相應的Bean去對應,當然,這兩個註解是jdk裡內建的
@PostConstruct
@PreDestroy
這兩個註解放在方法頭上。
@Autowired 根據bean 型別從spring 上下文中進行查詢。我們需要從以下幾方面來學習這個註解:
1、它都能放在什麼頭上?
它可以放在屬性、方法和構造方法頭上。
2、根據什麼注入?
2.1、如果某個介面的實現類在Spring容器中唯一的話,僅使用@Autowired就可以正確注入,如:
@Autowired
private SampleDao dao;
2.2、如果某個介面的實現類在Spring容器中不唯一
2.2.1、用@Qualifier來指定注入Bean的名字,如
@Autowired
@Qualifier(“sampleDaoImpl”)
private SampleDao dao;
2.2.2、用@Primary在多個Bean之中指定哪個為最優先者,注意它不是跟@Autowired配合使用,而是跟@Service配合使用,如
@Service @Primary SampleDaoImpl
2.2.3、用屬性名、方法引數名、構造方法引數名來設定注入哪個 Bean,如
public class SampleDaoImpl implements SampleDao
public class SampleDaoImpl1 implements SampleDao
對應
@Autowired
private SampleDao sampleDaoImpl;
注意:屬性名在編譯後是一定存在的;但是方法引數名和構造方法引數名必須指定相應的編譯選項才能保留。
3、@Autowired只有一個選項, boolean required() default true;是否必須,且預設為true。因此,如果僅僅使用@Autowired,就必須要能注入,否則會報錯。
@Resource擁有和@Autowired類似的作用。
Spring還支援使用@Configuration,把一個類作為一個IoC容器,它的某個方法頭上如果註冊了@Bean,就會作為這個Spring容器中的Bean。
java程式碼:
- @Configuration("ctx")
- public class JavaApplicationContext {
- @Bean
- public String hello(){
- return "hello";
- }
- @Bean
- public int max(){
- return 9;
- }
- }
@Configuration("ctx")
public class JavaApplicationContext {
@Bean
public String hello(){
return "hello";
}
@Bean
public int max(){
return 9;
}
}
使用AnnotationConfigApplicationContext獲得Spring容器
ApplicationContext context = new AnnotationConfigApplicationContext(JavaApplicationContext.class);
使用@ImportResource (“classpath:applicationContext.xml”)可以把其他容器匯入到這個容器中。
Spring使用的AOP註解分為三個層次:
1、@Aspect放在類頭上,把這個類作為一個切面,但是這個類一定要顯式的註冊在Spring容器中。
2、 @Pointcut放在方法頭上,定義一個可被別的方法引用的切入點表示式。
3、5種通知。
3.1、@Before,前置通知,放在方法頭上。
3.2、@After,後置【finally】通知,放在方法頭上。
3.3、@AfterReturning,後置【try】通知,放在方法頭上,使用returning來引用方法返回值。
3.4、@AfterThrowing,後置【catch】通知,放在方法頭上,使用throwing來引用丟擲的異常。
3.5、@Around,環繞通知,放在方法頭上,這個方法要決定真實的方法是否執行,而且必須有返回值。
相關文章
- Spring零配置之@Configuration註解詳解Spring
- Spring(使用註解配置)Spring
- spring通過註解配置Spring
- Spring系列之新註解配置+Spring整合junit+註解注入Spring
- spring,mybatis事務管理配置與@Transactional註解使用[轉]SpringMyBatis
- spring配置redis註解快取SpringRedis快取
- Spring配置使用註解注入beanSpringBean
- Spring Boot配置類的註解Spring Boot
- Spring基於註解的IoC配置Spring
- Spring基於註解的aop配置Spring
- spring註解@lazy,bean懶載入SpringBean
- 深入學習Spring框架(二)- 註解配置Spring框架
- Thrift 客戶端-服務端 零XML配置 註解式配置客戶端服務端XML
- Spring Boot 自動配置之條件註解Spring Boot
- Spring Boot 自動配置之組合註解Spring Boot
- Spring定時器的配置(註解+xml)方式Spring定時器XML
- Spring 常用的註解以及對應 XML 配置詳解SpringXML
- 【Spring註解驅動開發】使用@Lazy註解實現懶載入Spring
- Spring 註解自動裝載和檢測Spring
- Spring註解Spring
- 【Spring註解】事務註解@TransactionalSpring
- Spring Boot 自動配置之@Enable* 與@Import註解Spring BootImport
- spring基於註解配置實現事務控制Spring
- 轉載:Apache的配置詳解Apache
- Spring註解詳解Spring
- Spring5:@Autowired註解、@Resource註解和@Service註解Spring
- Spring常用註解Spring
- Spring註解大全Spring
- Spring boot註解Spring Boot
- Spring新註解Spring
- spring註解2Spring
- Spring 各種註解備註Spring
- Spring系列之手寫註解與配置檔案的解析Spring
- Spring-Boot專案中配置redis註解快取SpringbootRedis快取
- Spring學習筆記三: 通過註解配置BeanSpring筆記Bean
- SPRING-spring註解整理Spring
- 死磕Spring之AOP篇 - Spring AOP註解驅動與XML配置SpringXML
- Spring 註解程式設計之模式註解Spring程式設計模式