/**spring 介绍
* @author chengj
* @date : 20142014-2-19 下午07:58:51
* Spring 框架的两个核心特性 依赖注入(Dependency Injection DI) 和 面向切面工程 AOP (Aspect-Oriented Programming )
*/
定义一个接口
package SpringTest;
public interface Ihello {
public void hello(String name);
}
package SpringTest;
/**
* @author chengj
* @date : 20142014-2-19 下午08:03:14
* 正常的业务
*/
public class HelloSpeak implements Ihello {
public void hello(String name) {
System.out.println(name+"hello");
}
}
package SpringTest;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.junit.Test;
/**
* @author chengj
* @date : 20142014-2-18 下午08:27:54
* 静态代理
* 代理类 的一个接口 只能 服务一种类型的类。而且需要代理的方法有很多。势必要为每个方法进行代理,静态代理在程序鬼魔稍大时
* 必定是无法胜任的在
*在 JDK1.3 之后假如了可协助开发的动态代理公呢个的API等相关类别的,不需要为特定类和方法编写特定的带泪,使用动态代理,
*可以是的一个处理者(Handler)为各个类服务
*/
public class HelloProxy implements Ihello {
private Ihello helloObject;
private Logger logger = Logger.getLogger(this.getClass().getName());
public HelloProxy(Ihello helloObject) {//定义了接口
this.helloObject = helloObject;
}
public void hello(String name) {
log("hello method start "); //日志服务
helloObject.hello(name);//执行业务逻辑
log("hello method end ");//日期服务
}
private void log(String msg){
logger.log(Level.INFO,msg);
}
}
测试
/**
* @author chengj
* @date : 20142014-2-18 下午08:35:03
* AOP 中的aspect 所指的可以是像日志等动作和服务 ,将这些动作(cross-cutting concern)
* 设计为通用,不介入特定业务类的一个职责清楚的Aspect 类 。这就是所谓的Aspect-Oriented Programming AOP
*/
package SpringTest;
import org.springframework.aop.support.NameMatchMethodPointcutAdvisor;
public class Test {
@org.junit.Test
public void testHello(){
Ihello proxy = new HelloProxy(new HelloSpeak()); //用它来实现
proxy.hello("chengj");
}
}