欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

AOP使用場景:

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

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進(jìn)行無縫銜接
  • autowired默認(rèn)是根據(jù)類型匹配,如果類型匹配不上在根據(jù)名字匹配
  • 而Resource默認(rèn)根據(jù)名字匹配,名字匹配不上就匹配類型

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

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

3.Spring里面的AOP功能

3.1 AOP簡述

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

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

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

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

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

  • 對接口創(chuàng)建代理優(yōu)于對類創(chuàng)建代理,因為會產(chǎn)生更加松耦合的系統(tǒng)。對類代理是讓遺留系統(tǒng)或無法實現(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é)

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

相關(guān)文章

  • Java實現(xiàn)多選批量刪除功能(vue+Element)

    Java實現(xiàn)多選批量刪除功能(vue+Element)

    這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)多選批量刪除功能,包括前端vue實現(xiàn)代碼文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Java synchronized關(guān)鍵_動力節(jié)點Java學(xué)院整理

    Java synchronized關(guān)鍵_動力節(jié)點Java學(xué)院整理

    在java中,每一個對象有且僅有一個同步鎖。這也意味著,同步鎖是依賴于對象而存在。下面通過本文給大家介紹synchronized原理 及基本規(guī)則,感興趣的朋友一起學(xué)習(xí)吧
    2017-05-05
  • Java多線程工具CompletableFuture詳解

    Java多線程工具CompletableFuture詳解

    這篇文章主要介紹了Java多線程工具CompletableFuture詳解,CompletableFuture?是?java?1.8?追加的新特性,通俗的話來說,是一個函數(shù)式的,用于控制多任務(wù)同步、異步組合操作的工具,需要的朋友可以參考下
    2024-01-01
  • Spring Boot高級教程之使用Redis實現(xiàn)session共享

    Spring Boot高級教程之使用Redis實現(xiàn)session共享

    這篇文章主要為大家詳細(xì)介紹了Spring Boot高級教程之使用Redis實現(xiàn)session共享,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Java中ThreadLocal避免內(nèi)存泄漏的方法詳解

    Java中ThreadLocal避免內(nèi)存泄漏的方法詳解

    ThreadLocal是Java中的一個線程本地存儲機制,它允許每個線程擁有一個獨立的本地存儲空間,用于存儲該線程的變量,本文主要介紹了ThreadLocal如何避免內(nèi)存泄漏,需要的朋友可以參考下
    2023-05-05
  • Java中關(guān)于String StringBuffer StringBuilder特性深度解析

    Java中關(guān)于String StringBuffer StringBuilder特性深度解析

    這篇文章主要介紹了Java中關(guān)于String StringBuffer StringBuilder特性深度解析,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • java遍歷HashMap簡單的方法

    java遍歷HashMap簡單的方法

    這篇文章主要介紹了java遍歷HashMap簡單的方法,以實例形式簡單分析了采用java遍歷HashMap的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • Java語法基礎(chǔ)之運算符學(xué)習(xí)筆記分享

    Java語法基礎(chǔ)之運算符學(xué)習(xí)筆記分享

    這篇文章主要為大家分享了Java語法基礎(chǔ)之運算符學(xué)習(xí)筆記,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Elasticsearch 基礎(chǔ)介紹及索引原理分析

    Elasticsearch 基礎(chǔ)介紹及索引原理分析

    這篇文章主要介紹了Elasticsearch 基礎(chǔ)介紹及索引原理分析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • Java算法中的歸并排序算法代碼實現(xiàn)

    Java算法中的歸并排序算法代碼實現(xiàn)

    這篇文章主要介紹了Java算法中的歸并排序算法代碼實現(xiàn),歸并排序使用的是分治思想(Divide and Conquer),分治,顧名思義,就是分而治之,是將一個大問題分解成小的子問題來解決,需要的朋友可以參考下
    2023-12-12

最新評論