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

SpringAop的依賴注入方式

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

SpringAop依賴注入

1.Spring

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

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

AOP使用場景:

  • ? 事務管理
  • ? 日志管理
  • ? 性能控制

2.spring的DI依賴注入

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

  • 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版本的自動注入

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
    -->

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

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

區(qū)別:

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

如果你用的是Spring的注解,盡量全部使用Spring的標簽

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

3.Spring里面的AOP功能

3.1 AOP簡述

  • 定義: 面向切面編程(面向方面編程)
  • Spring使用動態(tài)代理織入。
  • Spring支持我們在方法的前后添加增強代碼。
  • Aop的功能作用Spring的兩個核心之一,也可以是Spring非常重要的功能。

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

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

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

3.使用該方案時需要注意:

  • 對接口創(chuàng)建代理優(yōu)于對類創(chuàng)建代理,因為會產(chǎn)生更加松耦合的系統(tǒng)。對類代理是讓遺留系統(tǒng)或無法實現(xiàn)接口的第三方類庫同樣可以得到通知,這種方案應該是備用方案。
  • 標記為final的方法不能夠被通知。spring是為目標類產(chǎn)生子類。任何需要被通知的方法都被復寫,將通知織入。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;關閉通知&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ù)的構造方法來創(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>

總結

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

相關文章

最新評論

夏邑县| 盐亭县| 温宿县| 丁青县| 乌兰察布市| 山阴县| 讷河市| 凤城市| 维西| 宽甸| 金华市| 杭锦后旗| 右玉县| 曲周县| 库车县| 丹寨县| 枝江市| 禄丰县| 湖南省| 南召县| 黑龙江省| 明星| 北碚区| 义乌市| 福海县| 祁东县| 阿拉善左旗| 尉犁县| 古田县| 盐亭县| 新疆| 霍州市| 县级市| 沧州市| 鲁山县| 贡觉县| 博客| 阜南县| 从化市| 门头沟区| 泉州市|