springAop

1.Spring 的依赖注入

1.1 什么是spring
	spring是一个轻量级和IOC(DI)和AOP的 容器框架
	IOC:控制反转 现在创建bean的方式,是交给spring帮我们创建
	DI:依赖注入  spring是容器框架,是一个bean(装对象的)容器框架,spring创建好对象之后,在把创建好的对象 注入到相应的类里面
	AOP:面向切面的编程,spring可以在类的方法前后添加逻辑进行处理,比如事务处理,日志处理 ,性能监控

1.2 spring的DI依赖注入
	1.2.1 set方式注入
			UserController{
			​	private UserService userService;
			​	void setUserService(UserService userService){
			​    		this.userServicer = userService;
			​     }
			}
			
	1.2.2构造器注入
		index索引注入:<constructor-arg index="0" value="123"></constructor-arg>
		name 参数名字注入:<constructor-arg name="id" value="456"></constructor-arg>
		type类型注入:<constructor-arg type="java.lang.Long" value="111"></constructor-arg>
		
 	1.2.3 类里面属性注入
 		属性注入:  最常用就是基本类型和引用类型注入
 		<property name="id" value="111"></property>
		<property name="hellobean" ref="hb"></property>
		<property name="hellobean">
                   <bean class="xxxx"></bean>
         </property>

		  map list/set/array了解
          注入properties -- 掌握
            <property name="prop2">
              <props>
                  <prop key="driverClassName">com.mysql.jdbc.Driver</prop>
                  <prop key="username">qiang强</prop>
              </props>
          </property>

1.3 XML版本自动注入
	byName: 按照名称自动注入
	byType:按照类型自动注入

1.4 XML版本注解注入
	扫描包路径

<context:component-scan base-package="_03_annoxml.cn.itsource"></context:component-scan>

如果一个接口有两个实现情况下:
	 方案一:一个接口有多个实现的情况下 通过名字去区分
	 方案二:通过Resource注解
	 @Autowired和@Qualifier和Resource的区别
		 @Autowired和@Qualifier 都是属于spring的注解 ,
          Resource使用jdk的注解 推荐使用Autowired和Qualifier,可以和spring进行无缝衔接
          autowired默认是根据类型匹配,如果类型匹配不上在根据名字匹配
          而Resource默认根据名字匹配,名字匹配不上就匹配类型
          @Autowired和@Qualifier两个配合使用区分接口有两个实现类的情况

2 Spring里面AOP功能

 2.1 aop: 面向切面的编程
 2.2aop的实现
 	aop底层使用代理模式实现
 2.3 springaop配置方式
 xml:
 	<context:component-scan base-package="_04_aopxml"></context:component-scan>
    <aop:config>
        	<aop:pointcut id="pointcut" expression="execution(* _04_aopxml.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="around" pointcut-ref="pointcut"></aop:around>
	        </aop:aspect>
    </aop:config>
    <bean id="txManager" class="_04_aopxml.TxManager"></bean>

	注解:
		@Component
		@Aspect
		public class TxManager {
		    @Pointcut("execution(* _05_aopanno.I*Service.*(..))")
		    public void pointcut(){}
		
		    //<aop:before method="begin" pointcut-ref="pointcut"></aop:before>
		    //@Before("pointcut()")
		    public void begin(){
		        System.out.println("开启事务");
		    }
		
		  ///  @After("pointcut()")
		    public void commit(){
		        System.out.println("提交事务");
		    }
		    //@AfterReturning("pointcut()")
		    public void close(){
		        System.out.println("关闭");
		    }
		    //所有的异常的父类
		   // @AfterThrowing(value = "pointcut()",throwing = "e")
		    public void rollback(Throwable e){
		        System.out.println("回滚事务"+e.getMessage());
		    }
		
		    //环绕通知
		    @Around("pointcut()")
		    public void around(ProceedingJoinPoint joinPoint){
		        try {
		            begin();
		            //调用方法
		            joinPoint.proceed();
		            commit();
		        } catch (Throwable throwable) {
		            throwable.printStackTrace();
		        }finally{
		            close();
		        }
		    }
		}

3 Bean的创建方式

3.1 Bean创建方式一
	通过无参数的构造方法来创建bean 
	<bean id="mybean" class="_06_bean.Mybean"></bean>

3.2 Bean创建方式二
	FactoryBean
	public class MybeanFactoryBean implements FactoryBean<Mybean> {
	    //返回对象
	    public Mybean getObject() throws Exception {
	        return new Mybean("xxx", "18");
	    }
	
	    public Class<?> getObjectType() {
	        return Mybean.class;
	    }
	    //是否单例
	    public boolean isSingleton() {
	        return true;
	    }
	}

3.3 Bean创建方式三
	通过类里面定义静态方法 来获取bean
		<bean class="_06_bean.MybeanFactory" factory-method="getBean"></bean>

3.4 Bean创建方式四
	普通方式
		<bean class="_06_bean.MybeanFactory1" id="mybeanFactory1"></bean>
		<bean factory-bean="mybeanFactory1" factory-method="getBean1"></bean>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值