本人刚学SSH框架,为了巩固自己所学知识,简单的表达出思想,意在是自己能够看得明白,言语很不专业,希望达人不要板砖,欢迎指正,谢谢!
1.UserManage.java
package com.spring;
public interface UserManage {
public void addUser(String name,String password);
public void delUser(int userId);
public String findUserById(int userId);
public void modify(int userId,String name,String password);
}
业务很简单,就是打印出一句话。。。。。如下:
2.UserManageImpl
package com.spring;
public class UserManageImpl implements UserManage {
@Override
public void addUser(String name, String password) {
//checkSecurity();
System.out.println("-------UserManageImpl.addUser---------");
}
@Override
public void delUser(int userId) {
//checkSecurity();
System.out.println("-------UserManageImpl.delUser---------");
}
@Override
public String findUserById(int userId) {
//checkSecurity();
System.out.println("-------UserManageImpl.findUserById---------");
return "张三";
}
@Override
public void modify(int userId, String name, String password) {
//checkSecurity();
System.out.println("-------UserManageImpl.modify---------");
}
// private void checkSecurity(){
// System.out.println("-------这是安全的--------");
// }
}
现在如果需要在现有的业务基础上增加需求,那我们必然需要修改上述代码,这样又会带来重新返工与测试。那么,我们可不可以在现有的基础上,在不改变原来已完成的基础之上,增加需要的业务需求呢?当然是可以的,这就涉及到“代理”。
假如现在要求在每个方法执行前都打印一段话。我们先通过"静态代理"实现。
3.UserManageProxy.java
package com.spring;
/**
* 静态代理,好处是不用修改以前的代码,但是这样checkSecurity()出现频数很大
*
* @author Administrator
*
*/
public class UserManageImplProxy implements UserManage {
private UserManage userManage;
public UserManageImplProxy(UserManage userManage){
this.userManage = userManage;
}
@Override
public void addUser(String name, String password) {
checkSecurity();
userManage.addUser(name, password);
}
@Override
public void delUser(int userId) {
checkSecurity();
userManage.delUser(userId);
}
@Override
public String findUserById(int userId) {
checkSecurity();
return userManage.findUserById(userId);
}
@Override
public void modify(int userId, String name, String password) {
checkSecurity();
userManage.modify(userId, name, password);
}
private void checkSecurity(){
System.out.println("-------这是安全的--------");
}
}
4.测试类
import junit.framework.TestCase;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.spring.UserManageImplProxy;
public class Test extends TestCase{
BeanFactory factory = null;
@Override
//与servlet类似,只执行一次,所以常用于初始化
protected void setUp() throws Exception {
factory = new ClassPathXmlApplicationContext("applicationContext.xml");
}
@Override
//与servlet类似,销毁时使用
protected void tearDown() throws Exception {
//
}
public void testAdd() {
UserManageImplProxy uip = (UserManageImplProxy)factory.getBean("userManageProxy");
uip.addUser("user01", "123456");
System.out.println("代理添加成功");
}
}
总结:
-------这是安全的--------
-------UserManageImpl.addUser---------
代理添加成功
-------UserManageImpl.addUser---------
代理添加成功