美文网首页
Spring:AOP思想学习

Spring:AOP思想学习

作者: 掌灬纹 | 来源:发表于2020-10-27 16:18 被阅读0次

    AOP:面向切面,原生思想来自代理模式的拓展,追溯源头设计模式的思想都来自与面向对象程序设计原则,即第一个原则 开闭原则:对新功能开放,对源代码修改闭

    代理模式(静态代理)

    • 用户:访问代理对象的角色,最终要对真实的对象进行操作
    • 真实对象:被代理的角色,处于代理模式最底层,功能确定、完善后不在修改
    • 代理对象: 代理对应的真实角色,并不断在其基础上附加一些所需的操作
    • 抽象的接口:约束规范真实对象的操作,是真实对象核心的缩影(常由接口或抽象类组成)

    实际开发中代理模式的使用

    // 抽象描述一个web项目中 对用户的操作
    // 1.抽象的接口
    public interface UserService {
    // 增删改查
        public void add(); 
        public void del();
        public void update();
        public void query(); 
    }
    
    // 2.真实对象
    public class UserServiceImpl implements UserService{
        @Override
        public void add() {
            System.out.println("增加用户");
        }
    
        @Override
        public void del() {
            System.out.println("删除用户");
        }
    
        @Override
        public void update() {
            System.out.println("修改用户");
        }
    
        @Override
        public void query() {
            System.out.println("查找用户");
        }
    }
    
    // 3.代理对象
    public class UserServiceProxy{
        private UserService userService;
    
    
        public void setUserService(UserService userService) {
            this.userService = userService;
        }
    
        /***
         * 拓展方法 debug
         * @param msg
         */
        public void printLog(String msg){
            System.out.println("[Debug] " + msg);
        }
    
        /**
         * 代理 管理调用 真实角色方法
         */
        public void add() {
            printLog("add()");
            userService.add();
        }
    
        public void del() {
            printLog("del()");
            userService.del();
        }
    
        public void update() {
            printLog("update()");
            userService.update();
        }
    
        public void query() {
            printLog("query()");
            userService.query();
        }
    }
    
    // Spring bean xml注入 
        <bean id="userService" class="com.ht.demo02.UserServiceImpl"/>
    
        <bean id="userServiceProxy" class="com.ht.demo02.UserServiceProxy">
            <property name="userService" ref="userService"/>
        </bean>
    
    
    // 4. 用户测试
    public class Test {
    
        public static void main(String[] args) {
    
             // java
            UserService userService = new UserServiceImpl();
            UserServiceProxy proxy = new UserServiceProxy();
            proxy.setUserService(userService);
            proxy.add();
    
            // spring
            ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
            UserServiceProxy userServiceProxy = context.getBean("userServiceProxy", UserServiceProxy.class);
            userServiceProxy.add();
        }
    }
    
    
    

    相关文章

      网友评论

          本文标题:Spring:AOP思想学习

          本文链接:https://www.haomeiwen.com/subject/pzsxvktx.html