单例模式: bean默认都是单例的.
原型模式: 指定bean的作用域 prototype
工厂模式: beanFactory 有三种:1.简单工厂模式(也叫静态工厂) 2.工厂方法模式 3.抽象工厂模式
模板方法设计模式 jdbcTemplate onRefresh()
策略设计模式
public class XmlBeanDefinitionReader extends AbstractBeanDefinitionReader {
public class PropertiesBeanDefinitionReader extends AbstractBeanDefinitionReader {
public class GroovyBeanDefinitionReader extends AbstractBeanDefinitionReader implements GroovyObject {
观察者模式 , 即监听者模式:
写一个具体的监听器
@Component
public class LearnListener implements ApplicationListener<ContextRefreshedEvent> {
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
// 需要执行的逻辑代码,当spring容器初始化完成后就会执行该方法。
System.out.println("监听到第一个onApplicationEvent");
//获取所有的bean
String[] definitionNames = event.getApplicationContext().getBeanDefinitionNames();
for (String name : definitionNames) {
//打印名称
System.out.println("definitionNames的name = " + name);
}
}
}
@Component
public class MyListener implements ApplicationListener<MyEvent> {
@Override
public void onApplicationEvent(MyEvent event) {
System.out.println("监听到第二个onApplicationEvent");
System.out.println("监听到事件: "+event.getId()+"\t"+event.getMessage());
}
}
适配器模式 Adapter
装饰者模式: BeanWrapper
责任链模式: 使用aop的时候, 会先生成一个拦截器链
代理模式: 动态代理
委派模式(Delegate Patter)行为模式: 源码中delegate结尾的类 如Spring MVC的DispatcherServlet.
public class DispatcherServlet extends HttpServlet {
private static final long serialVersionUID = 5766349180380479888L;
private static DispatcherServlet INSTANCE;
private static final Map<Integer, HttpHandler> handlers = new ConcurrentHashMap();
public static void addHttpHandler(int port, HttpHandler processor) {
handlers.put(port, processor);
}
public static void removeHttpHandler(int port) {
handlers.remove(port);
}
public static DispatcherServlet getInstance() {
return INSTANCE;
}
public DispatcherServlet() {
INSTANCE = this;
}
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpHandler handler = (HttpHandler)handlers.get(request.getLocalPort());
if (handler == null) {
response.sendError(404, "Service not found.");
} else {
handler.handle(request, response);
}
}
}
委派模式的作用: 基本作用就是负责任务的调用和分配任务,跟代理模式很像,可以看做是一种特殊情况下的静态代理的全权代理
代理模式注重过程,而委派模式注重结果
代理强调的是过程,主要是要在代理过程中加入一些动作的,而委派主要是分配和分发
委派模式对外隐藏了具体实现, 仅将委派者角色暴露给外部,