Spring 中AOP概念是老生长谈的东东了, 说起概念来大家都晕晕的, 真是不好理解 ,抓住问题的本质,
三个为什么恩。 AOP的目的是什么,为了解决什么问题引出的AOP,实现的原理是什么恩,三个问题
1引出AOP的问题是
yu
package com.cee.springMVC; import org.apache.log4j.Logger; public class LoginDemo { private Logger logger = Logger.getLogger(this.getClass().getName()); /** * * 假如我想在登陆前进行,后 日志记录操作 可能大家或说用log4j的方式,用这种方式会造成代码的入侵 * 而且相关代码很多,我不可能将每一个要日志操作的代码 写到每一个所需要的类 中,这样也太累了把 */ public void login() { logger.info("登陆前");// 模拟方法 System.out.println("login"); logger.info("登陆后");// 模拟方法 } }
原因明确了,那就跟着目的了,我们要解决这个问题恩, 解决的方式是
采用 代理的方式 ,将公用的代码提取出来,合理的植入到所要地方,植入 是要通过 Spring 的配置文件植入,不要在代 码中植入
代理模式的理解恩
接口与实现类 调用实现类 声明的时候 用接口类型 , 接口就上 类对象的一个 副本或者承认
写一个代理实现模式吧
package com.cee.proxy; /** * @author qcy 定义了 代理借口 通过接口调用实现类的方法 */ public interface Iproxy { public void testMothed(); public void testMothed2(); }
package com.cee.proxy; public class ProxyImple implements Iproxy { public void testMothed() { // TODO Auto-generated method stub System.out.print("testMothed"); } public void testMothed2() { // TODO Auto-generated method stub System.out.print("testMothed1"); } }
package com.cee.proxy; public class Main { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Iproxy ip = new ProxyImple(); ip.testMothed(); } }
写了一个简单的代理设计模式,实际上大部分的用动态代理设计模式,而不是这类的静态代理模式
贴一个网址吧 上面说的比我说的清楚http://www.iteye.com/topic/282511,至少他有时序图。
说说Spring 中的 关键就上 植入 的方式, 怎么植入
算了本来想写呢, 网上的例子很多。。。