Spring_demo6_AOP_XML

来源:互联网 发布:程序员考试考英语吗 编辑:程序博客网 时间:2024/06/05 03:28

bean.xml


<?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-4.1.xsd        ">            <!--设置要扫描的包的位置 -->     <context:component-scan base-package="com"/><context:annotation-config /> <!-- 支持aop注解 -->  <aop:aspectj-autoproxy /><!-- 第一步配置Bean,因为切面也是一个Bean --><bean id="aopTestInterceptor" class="com.aop.AopTest"></bean><!-- 当执行execution(public * com.service..*.add(..)) 这个方法,找到这个Aop引用了aopTestInterceptor,执行add方法前执行aopTestInterceptor对象的 before方法--><!-- 第二部配置AOP --><aop:config><!-- 第三步配置切面使用的表达式 --> <!-- 第四步配置切面,指定切面类 --><aop:aspect id="testAspect" ref="aopTestInterceptor"><aop:before method="before" pointcut="execution(public * com.service..*.*(..))" /></aop:aspect></aop:config></beans>

用户管理接口

package com.dao;import com.model.User;public interface UserDAO {public void save(User user);public void delete(User user);}


用户管理接口实现

package com.dao.impl;import org.springframework.stereotype.Component;import com.dao.UserDAO;import com.model.User;@Component("userDao")public class UserDaoImpl implements UserDAO{@Overridepublic void save(User user) {System.out.println("save " + user.getUsername());}@Overridepublic void delete(User user) {System.out.println("delete " + user.getUsername());}}


切面AOP

package com.aop;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.aspectj.lang.annotation.Pointcut;import org.springframework.stereotype.Component;@Aspect@Componentpublic class AopTest {//@Before("execution(public void com.dao.impl.UserDaoImpl.save(com.model.User))")//@Pointcut("execution(public * com.dao..*.*(..))")public void myMethod(){};//@Before("myMethod()")//@Before("execution(public void com.dao.impl.UserDaoImpl.save(com.model.User))")//@Before("execution(public * com.service..*.add(..))")public void before(){System.out.println("AopTest success");}}

逻辑处理Service

package com.service;import javax.annotation.Resource;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.stereotype.Component;import com.dao.UserDAO;import com.model.User;@Component("userService")public class UserService {private UserDAO userDAO;  public void add(User user) {userDAO.save(user);}public void delete(User user) {userDAO.delete(user);}public UserDAO getUserDAO() {return userDAO;}/** * @Resource 默认使用userDAO(前提只有一个bean) * @Resource(name = "user2") * @param userDAO *//*@Resource*/@Resource(name = "userDao")public void setUserDAO(UserDAO userDAO) {this.userDAO = userDAO;}}


AOP测试
package com.service;import org.junit.Test;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.model.User;/** * Dao主要做数据库的交互工作 * Modle 是模型 存放你的实体类 *Service 做相应的业务逻辑处理 *Action是一个控制器 * @author tao.zeng * */public class UserServiceTest {@Testpublic void testAdd() throws Exception {ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");UserService service = (UserService)ctx.getBean("userService");User u = new User();u.setUsername("syw");u.setPassword("syw");service.add(u);service.delete(u);}}






AOP测试
原创粉丝点击