最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringAop的依賴注入方式

 更新時(shí)間:2025年02月27日 09:53:50   作者:#0080FF  
文章介紹了Spring框架的依賴注入(DI)和面向切面編程(AOP)的基本概念和實(shí)現(xiàn)方式,Spring通過IOC容器管理Bean的創(chuàng)建和依賴注入,并提供了多種AOP實(shí)現(xiàn)方式,包括代理機(jī)制和配置選項(xiàng)

SpringAop依賴注入

1.Spring

它是一個(gè)輕量級(jí)和IOC(DI)和AOP的 容器框架:

  • IOC:控制反轉(zhuǎn) 現(xiàn)在創(chuàng)建bean的方式,是交給spring幫我們創(chuàng)建。(理解)
  • DI:依賴注入 spring它是容器框架,是一個(gè)bean(裝對(duì)象的)容器框架,spring幫我創(chuàng)建好對(duì)象之后,在把我們創(chuàng)建好的對(duì)象 注入到相應(yīng)的類里面
  • AOP:面向切面編程,Spring框架的AOP機(jī)制可以讓開發(fā)者把業(yè)務(wù)流程中的通用功能抽取出來,單獨(dú)編寫功能代碼。在業(yè)務(wù)流程執(zhí)行過程中,Spring框架會(huì)根據(jù)業(yè)務(wù)流程要求,自動(dòng)把獨(dú)立編寫的功能代碼切入到流程的合適位置。

AOP使用場(chǎng)景:

  • ? 事務(wù)管理
  • ? 日志管理
  • ? 性能控制

2.spring的DI依賴注入

2.1.根據(jù)構(gòu)造器注入:

  • index索引注入
<bean id="MyBean" class="cn.itsource._01_.MyBean">
	<constructor-arg index="0" value="666" />
	<constructor-arg index="1" value="石娃娃" />
</bean>
  • name 參數(shù)名字注入
<bean id="MyBean" class="cn.itsource._01_.MyBean">
	<constructor-arg name="id" value="1" />
	<constructor-arg name="name" value="石大娃" />
</bean>
  • type類型注入
<bean id="MyBean" class="cn.itsource._01_.MyBean">
	<constructor-arg type="java.lang.Long" value="1" />
	<constructor-arg type="java.lang.String" value="石二娃" />
</bean>

2.2類里面屬性注入

   <property name="id" value="20"></property>
        <!-- name -->
        <property name="name" value="馮增昕"></property>
        <!-- String數(shù)組-->
        <property name="arrys" value="1999,12,05"></property>
        <!--list set-->
        <property name="list">
            <list>
                <value>air jordan 1</value>
                <value>黑曜石</value>
            </list>
        </property>
        <property name="set">
            <set>
                <value>adiads</value>
                <value>Yeezy750</value>
            </set>
        </property>
        <property name="helloBeanList">
            <list>
            <ref bean="hb"></ref>
            <bean class="cn.itsource._01di.HelloBean"></bean>
            </list>
        </property>
        <property name="helloBeanSet">
            <set>
                <ref bean="hb"></ref>
                <bean class="cn.itsource._01di.HelloBean"></bean>
            </set>
        </property>
        <!-- map-->
        <property name="hp">
            <map>
                <entry key="star" value="星星"></entry>
                <entry key="sunshine " value="陽光"></entry>
            </map>
        </property>

        <!--Properties 不支持中文 -->
        <property name="pro1">
            <value>
                driverClassName=com.mysql.jdbc.Driver
                username=yu玉
            </value>
        </property>
        <!-- 支持中文-->
        <property name="pro2">
            <props>
                <prop key="driverClassName">com.mysql.jdbc.Driver</prop>
                <prop key="username">杰倫</prop>
            </props>
        </property>

2.3XML版本的自動(dòng)注入

default-autowire="byType"
default-autowire="byName"

byType根據(jù)類型,byName根據(jù)名字

2.4XML版本的注解引入

    <context:component-scan base-package="cn.itsource._03_autoxml"></context:component-scan>
    <!--
        掃描注解:
        @Component, @Repository, @Service,@Controller
    -->

如果一個(gè)接口有兩個(gè)實(shí)現(xiàn)情況下:

  • 方案一:一個(gè)接口有多個(gè)實(shí)現(xiàn)的情況下面 通過名字去區(qū)分
  • 方案二:通過Resource這個(gè)注解

區(qū)別:

  • @Autowired和@Qualifier 都是屬于spring的注解
  • Resource使用jdk的注解 推薦使用Autowired和Qualifier,可以和spring進(jìn)行無縫銜接
  • autowired默認(rèn)是根據(jù)類型匹配,如果類型匹配不上在根據(jù)名字匹配
  • 而Resource默認(rèn)根據(jù)名字匹配,名字匹配不上就匹配類型

如果你用的是Spring的注解,盡量全部使用Spring的標(biāo)簽

  • AutoWired與Resource都表示注入對(duì)象
  • AutoWired他是SPring提供的注解,@Resource是sun公司提供注解
  • AutoWired默認(rèn)是根據(jù)類型匹配,如果類型匹配不上在根據(jù)名字匹配
  • 建議大家使用Autowried 因?yàn)樗荢pring提供的注解,他能和Spring進(jìn)行無縫銜接集成,
  • 而Resource默認(rèn)根據(jù)名字匹配,名字匹配不上就匹配類型

3.Spring里面的AOP功能

3.1 AOP簡述

  • 定義: 面向切面編程(面向方面編程)
  • Spring使用動(dòng)態(tài)代理織入。
  • Spring支持我們?cè)诜椒ǖ那昂筇砑釉鰪?qiáng)代碼。
  • Aop的功能作用Spring的兩個(gè)核心之一,也可以是Spring非常重要的功能。

3.2 Spring中aop的實(shí)現(xiàn)

1.若目標(biāo)對(duì)象實(shí)現(xiàn)了若干接口,spring使用JDK的java.lang.reflect.Proxy類代理。

2.若目標(biāo)對(duì)象沒有實(shí)現(xiàn)任何接口,spring使用CGLIB庫生成目標(biāo)對(duì)象的子類。

3.使用該方案時(shí)需要注意:

  • 對(duì)接口創(chuàng)建代理優(yōu)于對(duì)類創(chuàng)建代理,因?yàn)闀?huì)產(chǎn)生更加松耦合的系統(tǒng)。對(duì)類代理是讓遺留系統(tǒng)或無法實(shí)現(xiàn)接口的第三方類庫同樣可以得到通知,這種方案應(yīng)該是備用方案。
  • 標(biāo)記為final的方法不能夠被通知。spring是為目標(biāo)類產(chǎn)生子類。任何需要被通知的方法都被復(fù)寫,將通知織入。final方法是不允許重寫的。

3.3 Springaop的配置

   <context:component-scan base-package="cn.itsource._04_aopxml"></context:component-scan>
    <aop:config>
        <aop:pointcut id="pointcut" expression="execution(* cn.itsource._04_aopxml.service.I*Service.*(..))"></aop:pointcut>
        <!--配置通知-->
        <aop:aspect ref="txManager">
            <!--前置通知-->
            <!--<aop:before method="begin" pointcut-ref="pointcut"></aop:before>-->
            <!--&lt;!&ndash;后置通知&ndash;&gt;-->
            <!--<aop:after-returning method="commit" pointcut-ref="pointcut"></aop:after-returning>-->
            <!--&lt;!&ndash;關(guān)閉通知&ndash;&gt;-->
            <!--<aop:after method="close" pointcut-ref="pointcut"></aop:after>-->
            <!--&lt;!&ndash;異常&ndash;&gt;-->
            <!--<aop:after-throwing method="rollback" throwing="e" pointcut-ref="pointcut"></aop:after-throwing>-->
            <!--環(huán)繞通知-->
            <aop:around method="surround" pointcut-ref="pointcut"></aop:around>

3.4 注解方式的配置

@Component
@Aspect
public class TxManager {

    @Pointcut("execution(* cn.itsource._05_aopanno.service.I*Service.*(..))")
    public void pointcut(){}

4.Bean的創(chuàng)建方式

4.1 Bean創(chuàng)建方式一

通過無參數(shù)的構(gòu)造方法來創(chuàng)建bean --最常用方式

配置

<bean id="mybean" class="cn.itsource._06_bean.Mybean"></bean>

4.2 Bean創(chuàng)建方式二

FactoryBean

public class MybeanFactoryBean implements FactoryBean<Mybean> {

    public Mybean getObject() throws Exception {
        return new Mybean("石楚玉", "仙桃之光");
    }

    public Class<?> getObjectType() {
        return Mybean.class;
    }

    //是否單例
    public boolean isSingleton() {
        return true;
    }

4.3 Bean的創(chuàng)建方式三

通過類里面定義靜態(tài)方法 來獲取bean

public class MybeanFactory {

    public static Mybean getBean(){
        return new Mybean();
    }
}
bean class="cn.itsource._06_bean.MybeanFactory" factory-method="getBean"></bean>

4.4 Bean的創(chuàng)建方式四

public class MybeanFactory1 {
    //普通方式
    public Mybean getBean1(){
        return new Mybean();
    }
}
<bean class="cn.itsource._06_bean.MybeanFactory1" id="mybeanFactory1"></bean>
<bean factory-bean="mybeanFactory1" factory-method="getBean1"></bean>

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

云阳县| 湘潭市| 荥阳市| 赫章县| 叙永县| 南通市| 南郑县| 泰顺县| 江阴市| 资阳市| 普兰店市| 沙湾县| 武冈市| 中西区| 芦溪县| 娱乐| 山东省| 绥江县| 阳泉市| 奉贤区| 文昌市| 蓝田县| 井陉县| 盖州市| 南昌县| 台山市| 镇康县| 聂荣县| 类乌齐县| 浦城县| 乐安县| 工布江达县| 遂昌县| 炎陵县| 合江县| 乐昌市| 商城县| 莱阳市| 江山市| 昆山市| 宁武县|