SpringAop的依賴注入方式
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>-->
<!--<!–后置通知–>-->
<!--<aop:after-returning method="commit" pointcut-ref="pointcut"></aop:after-returning>-->
<!--<!–關(guān)閉通知–>-->
<!--<aop:after method="close" pointcut-ref="pointcut"></aop:after>-->
<!--<!–異常–>-->
<!--<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)文章
Java調(diào)取創(chuàng)藍(lán)253短信驗(yàn)證碼的實(shí)現(xiàn)代碼
這篇文章主要介紹了Java調(diào)取創(chuàng)藍(lán)253短信驗(yàn)證碼的實(shí)現(xiàn)代碼,需要的朋友可以參考下2018-04-04
Maven項(xiàng)目啟動(dòng)報(bào)錯(cuò)error in opening zip file的解決方
這篇文章主要介紹了Maven項(xiàng)目啟動(dòng)時(shí)常見的`errorinopeningzipfile`錯(cuò)誤,分析了其根本原因在于JAR文件損壞,文章提供了多種解決方法,包括刪除損壞的JAR文件、清理本地倉庫、檢查磁盤錯(cuò)誤、手動(dòng)下載等,需要的朋友可以參考下2025-10-10
java自定義異常以及throw和throws關(guān)鍵字用法
這篇文章主要介紹了java自定義異常以及throw和throws關(guān)鍵字用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-02-02
Java把數(shù)字格式化為貨幣字符串實(shí)例代碼
這篇文章主要介紹了Java把數(shù)字格式化為貨幣字符串實(shí)例代碼,需要的朋友可以參考下2014-02-02
spring-boot-maven-plugin:unknown的完美解決方法
這篇文章主要介紹了spring-boot-maven-plugin:unknown的完美解決方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
springboot集成druid,多數(shù)據(jù)源可視化,p6spy問題
這篇文章主要介紹了springboot集成druid,多數(shù)據(jù)源可視化,p6spy問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01

