<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    tbwshc

    Spring3注解零配置 .

    我們?cè)谝郧皩W(xué)習(xí)Spring的時(shí)候,其所有的配置信息都寫在applicationContext.xml里,大致示例如下:

    java代碼:
    1. <beans>
    2. <beanname="ds"class="org.apache.commons.dbcp.BasicDataSource">
    3. <propertyname="driverClassName"value="oracle.jdbc.driver.OracleDriver"/>
    4. <propertyname="url"value="jdbc:oracle:thin:@localhost:1521:wangbin"/>
    5. <propertyname="username"value="tech37"/>
    6. <propertyname="password"value="tech37"/>
    7. </bean>
    8. <beanname="txManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    9. <propertyname="dataSource"ref="ds"/>
    10. </bean>
    11. <tx:adviceid="txAdvice"transaction-manager="txManager">
    12. <tx:attributes>
    13. <tx:methodname="get*"read-only="true"/>
    14. <tx:methodname="*"/>
    15. </tx:attributes>
    16. </tx:advice>
    17. <aop:config>
    18. <aop:advisoradvice-ref="txAdvice"
    19. pointcut="execution(*cn.javass..business.ebo.*Ebo.*(..))"/>
    20. </aop:config>
    21. </beans>


    在上面的示例中,我們可以典型的看到Spring的三種功能:
    1、IoC容器,如:
    <bean …>
    <property…/>
    </bean>
    2、AOP
    <aop:config/>
    3、事務(wù)
    <tx:advice/>
    首先我們學(xué)習(xí)如何使用注解來(lái)構(gòu)造IoC容器。
    用注解來(lái)向Spring容器注冊(cè)Bean。需要在applicationContext.xml中注冊(cè)<context:component-scan base-package=“cn.javass”/>。表明cn.javass包及其子包中,如果某個(gè)類的頭上帶有特定的注解【@Component/@Repository/@Service/@Controller】,就會(huì)將這個(gè)對(duì)象作為Bean注冊(cè)進(jìn)Spring容器。
    以上的4個(gè)注解,用法完全一摸一樣,只有語(yǔ)義上的區(qū)別。
    @Component 是所有受Spring 管理組件的通用形式,Spring 還提供了更加細(xì)化的注解形式: @Repository 、@Service 、@Controller ,它們分別對(duì)應(yīng)數(shù)據(jù)層Bean ,業(yè)務(wù)層Bean ,和表現(xiàn)層Bean 。
    其中,@Component不推薦使用。
    這四個(gè)注解都可以放在類的頭上,如果不指定其value【@Service】,則默認(rèn)的bean名字為這個(gè)類的簡(jiǎn)單類名首字母小寫;如果指定value【@Service(“dao”)】,則使用value作為ban名字。
    注意:如果cn.javass.SampleDao和cn.javass1.SampleDao都只用@Service注解,而不指定value會(huì)發(fā)生什么事?
    除了注冊(cè)Bean之外,還可以通過(guò)在<bean>上設(shè)置屬性來(lái)控制Bean的其他屬性,比如:
    <bean name="" class=""
    lazy-init=“true” //是否延遲初始化
    scope=“prototype” //bean的生命周期
    depends-on=“其他bean“ //依賴其他bean
    />
    在Spring中也有相應(yīng)的注解去對(duì)應(yīng)
    @Lazy
    @Scope
    @DependsOn
    他們都是放在類的頭上。
    除了注冊(cè)Bean之外,還可以通過(guò)在<bean>上設(shè)置屬性來(lái)控制Bean的初始化方法和析構(gòu)方法,比如:
    <bean name="" class=""
    init-method=“init“ //初始化方法
    destroy-method=“close“ //析構(gòu)方法
    />
    在Spring中也有相應(yīng)的Bean去對(duì)應(yīng),當(dāng)然,這兩個(gè)注解是jdk里內(nèi)置的
    @PostConstruct
    @PreDestroy
    這兩個(gè)注解放在方法頭上。
    @Autowired 根據(jù)bean 類型從spring 上下文中進(jìn)行查找。我們需要從以下幾方面來(lái)學(xué)習(xí)這個(gè)注解:
    1、它都能放在什么頭上?
    它可以放在屬性、方法和構(gòu)造方法頭上。
    2、根據(jù)什么注入?
    2.1、如果某個(gè)接口的實(shí)現(xiàn)類在Spring容器中唯一的話,tb僅使用@Autowired就可以正確注入,如:
    @Autowired
    private SampleDao dao;
    2.2、如果某個(gè)接口的實(shí)現(xiàn)類在Spring容器中不唯一
    2.2.1、用@Qualifier來(lái)指定注入Bean的名字,如
    @Autowired
    @Qualifier(“sampleDaoImpl”)
    private SampleDao dao;
    2.2.2、用@Primary在多個(gè)Bean之中指定哪個(gè)為最優(yōu)先者,注意它不是跟@Autowired配合使用,而是跟@Service配合使用,如
    @Service @Primary SampleDaoImpl
    2.2.3、用屬性名、方法參數(shù)名、構(gòu)造方法參數(shù)名來(lái)設(shè)置注入哪個(gè) Bean,如
    public class SampleDaoImpl implements SampleDao
    public class SampleDaoImpl1 implements SampleDao
    對(duì)應(yīng)
    @Autowired
    private SampleDao sampleDaoImpl;
    注意:屬性名在編譯后是一定存在的;但是方法參數(shù)名和構(gòu)造方法參數(shù)名必須指定相應(yīng)的編譯選項(xiàng)才能保留。
    3、@Autowired只有一個(gè)選項(xiàng), boolean required() default true;是否必須,且默認(rèn)為true。因此,如果僅僅使用@Autowired,就必須要能注入,否則會(huì)報(bào)錯(cuò)。
    @Resource擁有和@Autowired類似的作用。
    Spring還支持使用@Configuration,把一個(gè)類作為一個(gè)IoC容器,它的某個(gè)方法頭上如果注冊(cè)了@Bean,就會(huì)作為這個(gè)Spring容器中的Bean。

    java代碼:
    1. @Configuration("ctx")
    2. publicclassJavaApplicationContext{
    3. @Bean
    4. publicStringhello(){
    5. return"hello";
    6. }
    7. @Bean
    8. publicintmax(){
    9. return9;
    10. }
    11. }
    使用AnnotationConfigApplicationContext獲tb得Spring容器
    ApplicationContext context = new AnnotationConfigApplicationContext(JavaApplicationContext.class);
    使用@ImportResource (“classpath:applicationContext.xml”)可以把其他容器導(dǎo)入到這個(gè)容器中。
    Spring使用的AOP注解分為三個(gè)層次:
    1、@Aspect放在類頭上,把這個(gè)類作為一個(gè)切面,但是這個(gè)類一定要顯式的注冊(cè)在Spring容器中。
    2、 @Pointcut放在方法頭上,定義一個(gè)可被別的方法引用的切入點(diǎn)表達(dá)式。
    3、5種通知。
    3.1、@Before,前置通知,放在方法頭上。
    3.2、@After,后置【finally】通知,放在方法頭上。
    3.3、@AfterReturning,后置【try】通知,放在方法頭上,使用returning來(lái)引用方法返回值。
    3.4、@AfterThrowing,后置【catch】通知,放在方法頭上,使用throwing來(lái)引用拋出的異常。
    3.5、@Around,環(huán)繞通知,放在方法頭上,這個(gè)方法要決定真實(shí)的方法是否執(zhí)行,而且必須有返回值。

    posted on 2012-07-20 15:03 chen11-1 閱讀(2633) 評(píng)論(0)  編輯  收藏

    主站蜘蛛池模板: 亚洲av成人一区二区三区在线播放 | 黄视频在线观看免费| 久久精品亚洲视频| 日韩免费视频播播| 国产麻豆免费观看91| 二个人看的www免费视频| 亚洲午夜久久久精品电影院| 亚洲精品美女久久久久| 亚洲精品不卡视频| 亚洲国产成人超福利久久精品| 亚洲欧洲国产视频| 国产AV无码专区亚洲AVJULIA| 久久久久亚洲AV成人网人人软件| 亚洲愉拍99热成人精品热久久| 久久久久一级精品亚洲国产成人综合AV区| 亚洲人成色77777在线观看大| 亚洲无码黄色网址| 好爽…又高潮了毛片免费看| 中文精品人人永久免费| 亚洲精品蜜夜内射| 亚洲精品无码久久久久久久 | 亚洲日本中文字幕区| 久久狠狠高潮亚洲精品| 国产亚洲成归v人片在线观看| 在线A亚洲老鸭窝天堂| 亚洲AV永久纯肉无码精品动漫 | 亚洲国产精品国自产拍AV| 亚洲AV本道一区二区三区四区| 亚洲毛片无码专区亚洲乱| 亚洲AV成人影视在线观看| 狠狠综合亚洲综合亚洲色| 国产精品极品美女自在线观看免费 | 国产又大又黑又粗免费视频| 国产偷国产偷亚洲高清日韩| 亚洲高清在线视频| 亚洲人成人77777在线播放| 特级毛片A级毛片100免费播放| 亚洲中文字幕无码亚洲成A人片| 国产亚洲精品免费| 日韩免费高清播放器| 青青在线久青草免费观看|