java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringAop依赖注入

SpringAop的依赖注入方式

作者:#0080FF

文章介绍了Spring框架的依赖注入(DI)和面向切面编程(AOP)的基本概念和实现方式,Spring通过IOC容器管理Bean的创建和依赖注入,并提供了多种AOP实现方式,包括代理机制和配置选项

SpringAop依赖注入

1.Spring

它是一个轻量级和IOC(DI)和AOP的 容器框架:

AOP使用场景:

2.spring的DI依赖注入

2.1.根据构造器注入:

<bean id="MyBean" class="cn.itsource._01_.MyBean">
	<constructor-arg index="0" value="666" />
	<constructor-arg index="1" value="石娃娃" />
</bean>
<bean id="MyBean" class="cn.itsource._01_.MyBean">
	<constructor-arg name="id" value="1" />
	<constructor-arg name="name" value="石大娃" />
</bean>
<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数组-->
        <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根据类型,byName根据名字

2.4XML版本的注解引入

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

如果一个接口有两个实现情况下:

区别:

如果你用的是Spring的注解,尽量全部使用Spring的标签

3.Spring里面的AOP功能

3.1 AOP简述

3.2 Spring中aop的实现

1.若目标对象实现了若干接口,spring使用JDK的java.lang.reflect.Proxy类代理。

2.若目标对象没有实现任何接口,spring使用CGLIB库生成目标对象的子类。

3.使用该方案时需要注意:

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>-->
            <!--环绕通知-->
            <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的创建方式

4.1 Bean创建方式一

通过无参数的构造方法来创建bean --最常用方式

配置

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

4.2 Bean创建方式二

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的创建方式三

通过类里面定义静态方法 来获取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的创建方式四

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>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文