码迷,mamicode.com
首页 > 编程语言 > 详细

Spring学习之路(三)bean注解管理AOP操作

时间:2017-09-01 16:10:29      阅读:283      评论:0      收藏:0      [点我收藏+]

标签:aspectj   expr   int   ack   异常   actor   turn   imp   use   

在类上面、方法上面、属性上面添加注解;并用bean来管理;

书写方法:@注解名称(属性名称=值)

第一步:导入jar包

  导入spring-aop.jar(spring注解包);

第二步:创建实体类(注解对象)

 

package com.aop;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

/**
 * value的值是自定义属性值
 * @Component(value="user")    
 * @Controller    web层
 * @Service        业务层
 * @Repository    持久层
 * 
 * (value="xx" 相当于      <bean id="xx" class="路径"></bean>
 * 四种注解方式,功能都相同
 */
@Component(value="user")
@Scope(value="prototype")    //创建是多例还是单例
public class AopUser {
    public void add() {
        System.out.println("add---------------");
    }
}

 

第三步:配置注解文件,引入约束

  核心约束:spring-beans.xsd

  注解约束:spring-context.xsd

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context.xsd"> 
        <!-- 开启注解扫描 -->
        <!-- base-package :扫描到包里边的所有是否存在注解 -->
        <context:component-scan base-package="com.aop"></context:component-scan>
      <!--   <context:annotation-config></context:annotation-config> 扫描属性上的注解 -->
</beans>

 

第四步:测试

    @Test
    public void test() {
        //加载 spring 配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext("bean2.xml");
//        得到注解对象 value的值
        AopUser user =  (AopUser) context.getBean("user");
        user.add();
    }

多例练习

package com.ioc;

import javax.annotation.Resource;

import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

@Service(value="user")
public class User {
    //@Autowired    两种方法都可以
    @Resource(name="userDao")//获取userDao注解名称
    private UserDao userDao;
    //得到dao对象,在使用注解方式时不需要set方法
    public void add() {
        System.out.println("user=====--------");
        userDao.add();
    }
}
//userDao类

@Component(value="userDao")
public class UserDao {
    public void add() {
        System.out.println("dao---------------");
    }
}

//测试;配置文件同上
@Test
public void test() {
    //加载 spring 配置文件
    ApplicationContext context = new ClassPathXmlApplicationContext("bean2.xml");
//    得到注解对象 value的值
    User user =  (User) context.getBean("user");
    user.add();
}

AOP操作

  1、导入jar包(看spring入门)

  2、创建实体类

package com.ioc;

import javax.annotation.Resource;


public class User {
    public void add() {
        System.out.println("user=====--------");
    }
}

// userDao类

import org.aspectj.lang.ProceedingJoinPoint;

public class UserDao {
    public void add() {
        System.out.println("前置增强---------------");
    }
    public void after(){
        System.out.println("后置增强------------");
    }
    
//    环绕通知
    public void arount(ProceedingJoinPoint proceedingJoinPoint) throws Throwable{
//        方法之前
        System.out.println("方法之前执行----------------");
//        执行增强的方法
        proceedingJoinPoint.proceed();
//        方法之后
        System.out.println("方法后执行----------------");
    }
}

  3、配置bean文件(导入aop约束)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context.xsd
         http://www.springframework.org/schema/aop 
         http://www.springframework.org/schema/aop/spring-aop.xsd">  

         <!-- 配置对象 -->
         <bean id="user" class="com.ioc.User"></bean>
         <bean id="userDao" class="com.ioc.UserDao"></bean>
         <!-- 配置aop操作 -->
         <aop:config>
             <!-- 配置切入点 -->
              <!-- execution(<访问修饰符>?<返回类型><方法名>(<参数>)<异常>) -->
             <aop:pointcut expression="execution(* com.ioc.User.*(..))" id="pointcut1"/>
             <!-- 配置切面 ;把增强放到方法上面-->
             <aop:aspect ref="userDao">
                 <!-- 配置增强类型;
                     method:设置 userdao中的增强的方法名
                     pointcut-ref:指向切入点ID值
                     就是先执行userDao里的方法,再执行user里的方法
                  -->
                 <aop:before method="add" pointcut-ref="pointcut1"/>
                 <!-- 后置增强 执行user的方法之后才会执行 after方法 -->
                 <aop:after-returning method="after" pointcut-ref="pointcut1"/>
                 <!-- 在执行user方法的前后开始执行其中的方法 -->
                 <aop:around method="arount" pointcut-ref="pointcut1"/>
             </aop:aspect>
         </aop:config>
</beans>

  4、测试

package com.junit;

import static org.junit.Assert.*;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.ioc.User;



public class Text {

    @Test
    public void test() {
        //加载 spring 配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext("bean2.xml");
//        得到注解对象 value的值
        User user =  (User) context.getBean("user");
        user.add();
    }

}

Spring学习之路(三)bean注解管理AOP操作

标签:aspectj   expr   int   ack   异常   actor   turn   imp   use   

原文地址:http://www.cnblogs.com/yaowan/p/7463637.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!