1226JAVA学习

总结

Spring依赖注入

  • xml注入

    • 在xml中配置,但是要有对应的setter方法,所以又叫属性注入或setter方法注入
  • 注解注入

    • 可以写在setter方法上,也可以是在字段上,字段上不需要setter方法
  • 构造参数注入

    • 普通参数

      1. 方式一:根据参数索引注入

        <constructor-arg index="0" value="111">
        
      2. 方式二:根据参数名称注入

        <constructor-arg name="id" value="222" />
        
      3. 方式三:根据参数类型注入(多个参数类型相同时会出问题)

        <constructor-arg type="java.lang.String" value="小星"/>
        
    • 当其中一个参数是对象时

      1. 外部引入

        <bean id="youBean" class="cn.itsource._01_constructor.domain.YouBean"/>
        <bean id="myBean" class="cn.itsource._01_constructor.domain.MyBean">
            <constructor-arg name="id" value="444"/>
            <constructor-arg name="name" value="小黑"/>
            <constructor-arg ref="youBean"/>
         </bean>
        
      2. 内部Bean完成

        <constructor-arg>
              <bean class="cn.itsource._01_constructor.domain.YouBean"></bean>
        </constructor-arg>
        
    • 参数是集合和数组时

      1. private List otherBeanList;

        <constructor-arg name="otherBeanList">
                    <list>
                        <bean class="cn.itsource._01_constructor.domain.YouBean"/>
                        <ref bean="youBean"/>
                    </list>
        </constructor-arg>
        
      2. private Set set;

        <constructor-arg name="set">
                    <set>
                        <value>小芳</value>
                    </set>
        </constructor-arg>
        
      3. private Properties props1;

        <constructor-arg name="props1">
                    <props>
                        <prop key="driver" >com.mysql.jdbc.driver</prop>
                        <prop key="username" >root</prop>
                    </props>
        </constructor-arg>
        
      4. private String[] arrays;

        <constructor-arg name="arrays">
                    <array>
                        <value>zx</value>
                        <value>ww</value>
                    </array>
        </constructor-arg>
        

AOP

  • Spring实现Aop的两种方案

    • JDK(对象实现了若干接口)
    • CGLIB(没有实现任何接口)
  • Aop使用的时动态代理模式

  • xml实现Aop

    <aop:config>
        	<!--切点-->
            <aop:pointcut id="pointcut" expression="execution(* cn.itsource._03_aopxml_service.impl.*.*(..))"/>
        	<!--切面-->
            <aop:aspect ref="txManager">
                <!--前置通知-->
                <aop:before method="open" pointcut-ref="pointcut"/>
                <!--后置通知-->
                <aop:after-returning method="commit" pointcut-ref="pointcut"/>
                <!--异常通知-->
                <aop:after-throwing method="rollback" pointcut-ref="pointcut" throwing="e"/>
                <!--后置通知-->
                <aop:after method="close" pointcut-ref="pointcut"/>
                <!--环绕通知-->
                <--<aop:around method="around" pointcut-ref="pointcut"/>
            </aop:aspect>
        </aop:config>
    
  • 注解实现Aop

    • 配置文件

      	<!--扫描包-->
          <context:component-scan base-package="cn.itsource._04_aopanno_service"/>
          <!--支持aop注解-->
          <aop:aspectj-autoproxy/>
      
    • 注解方式

      package cn.itsource._04_aopanno_service;
      
      import org.aspectj.lang.ProceedingJoinPoint;
      import org.aspectj.lang.annotation.*;
      import org.springframework.stereotype.Component;
      
      @Component
      @Aspect //aop注解
      public class TxManager {
      
          @Pointcut("execution(* cn.itsource._04_aopanno_service.impl.*.*(..))")
          public void pointCut(){}
      
          @Before("pointCut()")
          public void open(){
              System.out.println("事务开启");
          }
          @AfterReturning("pointCut()")
          public void commit(){
              System.out.println("事务提交");
          }
          @AfterThrowing(value = "pointCut()",throwing = "e")
          public void rollback(Throwable e){
              System.out.println("事务回滚");
              System.out.println("异常情况:"+e.getMessage());
          }
          @After("pointCut()")
          public void close(){
              System.out.println("事务关闭");
          }
      
          /*@Around("pointCut()")
          public void around(ProceedingJoinPoint joinPoint){
              try {
                  open();
                  joinPoint.proceed();
                  commit();
              } catch (Throwable e) {
                  rollback(e);
                  e.printStackTrace();
              } finally {
                  close();
              }
          }*/
      }
      
      

创建Bean的四种方式

  • 普通依赖注入
  • 集成静态简单工厂
  • 集成实例简单工厂
  • 使用FactoryBean
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值