集合注入
编写Student实体
public class Student{
private Integer stu_id;
private String stu_name;
private List<String> lists;
public Integer getStu_id() {
return stu_id;
}
public void setStu_id(Integer stu_id) {
this.stu_id = stu_id;
}
public String getStu_name() {
return stu_name;
}
public void setStu_name(String stu_name) {
this.stu_name = stu_name;
}
public List<String> getLists() {
return lists;
}
public void setLists(List<String> lists) {
this.lists = lists;
}
}
编写applicationContext.xml文件
<bean id="student" class="spring.di.Student">
<property name="lists">
<list>
<value>zeng</value>
<value>zhen</value>
<value>chao</value>
</list>
</property>
</bean>
运行结果
静态代理
编写Subject真实业务接口
/*抽象主题 真实业务接口*/
public interface Subject {
public void doSome();
}
编写RealSubject 真实主题,实现Subject
/*真实主题:将业务代码封装到此主题当中*/
public class RealSubject implements Subject{
@Override
public void doSome() {
System.out.println("真实业务-------");
}
}
编写ProcySubject 代理主题继承Subject
public class ProcySubject implements Subject {
/*代理主题:代理类 生成真实主题对象,调用真实主题的方法
程序就不用直接去创建真实主题了,直接调用代理对象
静态代理:说白了,就是创建一 个给程序调用的类(代理类),然后用代理类去吊原始对象
*/
private Subject subject=new RealSubject();
@Override
public void doSome() {
System.out.println("前置");
subject.doSome();
System.out.println("后置");
}
}
编写test测试类
```java
//JDK动态代理:要求必须有抽象主题
//代表的是代理对象指定对 象的原始类型
public class Test {
public static void main(String[] args) {
ProcySubject procySubject=new ProcySubject();
procySubject.doSome();
}
}
结果
代理主题:代理类 生成真实主题对象,调用真实主题的方法
程序就不用直接去创建真实主题了,直接调用代理对象
静态代理:说白了,就是创建一 个给程序调用的类(代理类),然后用代理类去吊原始对象
动态代理
//JDK动态代理:要求必须有抽象主题
//代表的是代理对象指定对 象的原始类型
public class Test {
public static void main(String[] args) {
//创建一个原始类
final Subject subject=new RealSubject();
/*ClassLoader loader,类加载器: 应该是代理对象的类加载器
Class<?>[] interfaces, 接口: 原始对象实现的接口类型
InvocationHandler h*/
Subject Subjects=(Subject)Proxy.newProxyInstance(subject.getClass().getClassLoader(), subject.getClass().getInterfaces(), new InvocationHandler() {
@Override
/*@param proxy 代理对象
@param method目标代理方法
@param args目标代理方法的参数
@return
@throws Throwable*/
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("--前--");
Object invoke = method.invoke(subject, args);
System.out.println(invoke);
System.out.println("--后--");
return invoke;
}
});
subject.doSome();
System.out.println(subject);
System.out.println(Subjects);
}
}
运行结果