Spring--AOP

AOP目的:为了解耦,可以让一组类共享相同的行为。

OOP中只能通过继承类和实现接口,来使代码的耦合度增强,且类继承只能是单继承。

Spring支持AspectJ的注解式切面编程:

  1)使用@AspectJ声明是一个切面;

  2)使用@After、@Before、@Arround定义建言,可直接将拦截规则(切点)作为参数;

  3)其中@After、@Before、@Arround参数的拦截规则为切点,为了使切点复用,可使用@PointCut专门定义拦截规则,然后在@After、@Before、@Arround的参数中调用;

  4)其中符合条件的每一个被拦截处为连接点。

 

Bean的Scope:

  1)Singleton:一个Spring容器中只有一个Bean的实例,此为Spring的默认配置,全容器共享一个实例

  2)Prototype:每次调用新建一个Bean的实例

  3)Request:Web项目中,给每一个http request 新建一个Bean实例

  4)Session:Web项目中,给每一个http session 新建一个Bean实例

  5)GlobalSession:给每一个portal http session 新建一个Bean实例

 

Spring的事件:

  1)自定义事件,继承ApplicationEvent;

public class DemoEvent extends ApplicationEvent {

private static final long serialVersionUID = 1L;

private String msg;

public DemoEvent(Object source,String msg) {
super(source);
this.msg = msg;
}

public String getMsg() {
return msg;
}

public void setMsg(String msg) {
this.msg = msg;
}


}

  2)定义事件监听器,实现ApplicationListener;

@Component
public class DemoListener implements ApplicationListener<DemoEvent> {

@Override
public void onApplicationEvent(DemoEvent demoEvent) {
String msg = demoEvent.getMsg();
System.out.println("我接收到发布的消息:" + msg);
}
}

  3)使用容器发布事件。

@Component
public class DemoPublisher {

@Autowired
ApplicationContext applicationContext;

public void publish(String msg){
applicationContext.publishEvent(new DemoEvent(this,msg));
}
}

 

原文地址:https://www.cnblogs.com/fqfanqi/p/9297339.html