初学spring 关于IOC与AOP 使用的设计模式
2017-06-23 08:53
1066 查看
IOC(Inverse of Control) 控制反转
以前程序中需要使用对象时,需要自己new一个,造成程序与对象的强耦合。
IOC 对象的生成交给spring容器完成
DI(Dependency Injection),依赖注入
IOC与DI一个意思,等价
AOP(Aspect-oriented Programming)面向切面编程
----------------------------------------------------------------------------------------------------------------------------------------------------------
Spring IOC使用了工厂模式
抽象产品:
Product.Java
[java]
view plain
copy
<span style="font-size:18px">package com.test.simplefactory;
public abstract class Product
{
}
</span>
具体产品:
ConcreteProductA.java
[java]
view plain
copy
<span style="font-size:18px">package com.test.simplefactory;
public class ConcreteProductA extends Product
{
}
</span>
ConcreteProductB.java
[java]
view plain
copy
<span style="font-size:18px">package com.test.simplefactory;
public class ConcreteProductB extends Product
{
}
</span>
工厂类
Creator.java
[java]
view plain
copy
<span style="font-size:18px">package com.test.simplefactory;
public class Creator
{
public static Product createProduct(String str)
{
if("A".equals(str))
{
return new ConcreteProductA();
}
else if("B".equals(str))
{
return new ConcreteProductB();
}
else
{
return null;
}
}
}
</span>
具体应用
Client.java
[java]
view plain
copy
<span style="font-size:18px">package com.test.simplefactory;
public class Client
{
public static void main(String[] args)
{
Product productA = Creator.createProduct("A");
System.out.println(productA.getClass().getName());
Product productB = Creator.createProduct("B");
System.out.println(productB.getClass().getName());
}
}
</span>
----------------------------------------------------------------------
Spring AOP使用了代理模式
静态代理
抽象角色
Subject.java
[java]
view plain
copy
<span style="font-size:18px">package com.test.proxy;
// 抽象角色
public abstract class Subject
{
abstract public void request();
}
</span>
代理角色 中介
ProxySubject.java
[java]
view plain
copy
<span style="font-size:18px">package com.test.proxy;
//代理角色
public class ProxySubject extends Subject
{
private RealSubject realSubject; // 以真实角色作为代理角色的属性
public ProxySubject()
{
}
public void request() // 该方法封装了真实对象的request方法
{
preRequest();
if (realSubject == null)
{
realSubject = new RealSubject();
}
realSubject.request(); // 此处执行真实对象的request方法
postRequest();
}
private void preRequest()
{
// something you want to do before requesting
}
private void postRequest()
{
// something you want to do after requesting
}
}
</span>
真实角色 房东
RealSubject.java
[java]
view plain
copy
<span style="font-size:18px">package com.test.proxy;
//真实角色:实现了Subject的request()方法
public class RealSubject extends Subject
{
public RealSubject()
{
}
public void request()
{
System.out.println("From real subject.");
}
}
</span>
客户端调用 租客
Client.java
[java]
view plain
copy
<span style="font-size:18px">package com.test.proxy;
//客户端调用
public class Client
{
public static void main(String[] args)
{
Subject sub = new ProxySubject();
sub.request();
}
}
</span>
以前程序中需要使用对象时,需要自己new一个,造成程序与对象的强耦合。
IOC 对象的生成交给spring容器完成
DI(Dependency Injection),依赖注入
IOC与DI一个意思,等价
AOP(Aspect-oriented Programming)面向切面编程
----------------------------------------------------------------------------------------------------------------------------------------------------------
Spring IOC使用了工厂模式
抽象产品:
Product.Java
[java]
view plain
copy
<span style="font-size:18px">package com.test.simplefactory;
public abstract class Product
{
}
</span>
具体产品:
ConcreteProductA.java
[java]
view plain
copy
<span style="font-size:18px">package com.test.simplefactory;
public class ConcreteProductA extends Product
{
}
</span>
ConcreteProductB.java
[java]
view plain
copy
<span style="font-size:18px">package com.test.simplefactory;
public class ConcreteProductB extends Product
{
}
</span>
工厂类
Creator.java
[java]
view plain
copy
<span style="font-size:18px">package com.test.simplefactory;
public class Creator
{
public static Product createProduct(String str)
{
if("A".equals(str))
{
return new ConcreteProductA();
}
else if("B".equals(str))
{
return new ConcreteProductB();
}
else
{
return null;
}
}
}
</span>
具体应用
Client.java
[java]
view plain
copy
<span style="font-size:18px">package com.test.simplefactory;
public class Client
{
public static void main(String[] args)
{
Product productA = Creator.createProduct("A");
System.out.println(productA.getClass().getName());
Product productB = Creator.createProduct("B");
System.out.println(productB.getClass().getName());
}
}
</span>
----------------------------------------------------------------------
Spring AOP使用了代理模式
静态代理
抽象角色
Subject.java
[java]
view plain
copy
<span style="font-size:18px">package com.test.proxy;
// 抽象角色
public abstract class Subject
{
abstract public void request();
}
</span>
代理角色 中介
ProxySubject.java
[java]
view plain
copy
<span style="font-size:18px">package com.test.proxy;
//代理角色
public class ProxySubject extends Subject
{
private RealSubject realSubject; // 以真实角色作为代理角色的属性
public ProxySubject()
{
}
public void request() // 该方法封装了真实对象的request方法
{
preRequest();
if (realSubject == null)
{
realSubject = new RealSubject();
}
realSubject.request(); // 此处执行真实对象的request方法
postRequest();
}
private void preRequest()
{
// something you want to do before requesting
}
private void postRequest()
{
// something you want to do after requesting
}
}
</span>
真实角色 房东
RealSubject.java
[java]
view plain
copy
<span style="font-size:18px">package com.test.proxy;
//真实角色:实现了Subject的request()方法
public class RealSubject extends Subject
{
public RealSubject()
{
}
public void request()
{
System.out.println("From real subject.");
}
}
</span>
客户端调用 租客
Client.java
[java]
view plain
copy
<span style="font-size:18px">package com.test.proxy;
//客户端调用
public class Client
{
public static void main(String[] args)
{
Subject sub = new ProxySubject();
sub.request();
}
}
</span>
相关文章推荐
- 初学spring 关于IOC与AOP 使用的设计模式
- 初学spring 关于IOC与AOP 使用的设计模式
- 死磕Spring AOP系列5:设计模式在AOP中的使用
- 关于 spring aop execution 属性的使用
- 初学spring3,关于MultiActionController的使用和配置
- Spring 使用AOP导致IOC注入失败
- Spring 使用中的设计模式
- 基于配置文件的工厂设计模式实现,并且做到对象的单例,类似于spring的ioc
- Spring 使用AOP导致IOC注入失败
- 关于EJB使用中的一些设计模式的说明
- 关于spring切面使用<aop:aspectj-autoproxy/>报错的解决方法
- spring ,ioc ,dependency injection 的设计模式
- 关于spring,IOC和AOP的解析原理和举例
- Spring特点中关于DI,IOC及AOP的个人理解
- 关于模式的学习和使用交流(设计模式、架构模式。。)
- 关于工厂模式和spring的IOC
- 关于 设计模式的单例与 spring配置applicationContext文件单例 一点阐述
- Spring 2.0 中使用AOP新特性中关于Poincur的定义规则
- Spring特点中关于DI,IOC及AOP的个人理解
- 关于spring的AOP使用