IOC和Aop使用的扩展

下面还有静态代理和动态代理

1.构造注入

lib包:

IOC和Aop使用的扩展

在entity包下新建一个实体类User

IOC和Aop使用的扩展

代码:

 package cn.happy.entity;

 public class User {
private Integer id;
private String name;
private String age;
private String eamil; public User(Integer id, String name, String age, String eamil) {
this.id = id;
this.name = name;
this.age = age;
this.eamil = eamil;
}
public User(String name, String age, String eamil) {
super();
this.name = name;
this.age = age;
this.eamil = eamil;
}
public User() {
}
public User(String name, String age) {
this.name = name;
this.age = age;
} public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getEamil() {
return eamil;
}
public void setEamil(String eamil) {
this.eamil = eamil;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age
+ ", eamil=" + eamil + "]";
} }

User

在applicationContext.xml里面写

IOC和Aop使用的扩展

约束-头:

别忘记带这个不然会报错的applicationContext.xml里面!

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
">

applicationContext.xml

代码:

 <bean id="user1" class="cn.happy.entity.User">
<constructor-arg index="0" type="java.lang.String" value="LXL"></constructor-arg>
<constructor-arg index="1" type="java.lang.String" value="12"></constructor-arg>
</bean>

applicationContext.xml

测试类:Text

IOC和Aop使用的扩展

代码:

 public class Text {
@Test
public void inner(){
gouinner();
}
//p命名空间注入
static void gouinner(){
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
User user=(User)context.getBean("user1");
System.out.println(user);
}

text

结果:

2.P命名空间注入

这个实体类和上面的一样就演示了

在applicationContext.xml里面写

IOC和Aop使用的扩展

代码:

  <!-- p命名空间注入 -->
<bean id="user2" class="cn.happy.entity.User" p:name="你的肉" p:age="1" p:eamil="niderou@123.com"/>

applicationContext.xml

测试类Text:

IOC和Aop使用的扩展

代码:

     @Test
public void inner(){
Pinner();
}
//构造注入
static void Pinner(){
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
User user=(User)context.getBean("user2");
System.out.println(user);
}

text

结果:

IOC和Aop使用的扩展

3.注入集合的属性

List

实体类Jihe:

IOC和Aop使用的扩展

代码:

 package cn.happy.entity;

 import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set; public class Jihe {
private List<String> list; private Set<String> set; private Map<String,String> map; private Properties props; public Properties getProps() {
return props;
} public void setProps(Properties props) {
this.props = props;
} public Map<String, String> getMap() {
return map;
} public void setMap(Map<String, String> map) {
this.map = map;
} public Set<String> getSet() {
return set;
} public void setSet(Set<String> set) {
this.set = set;
} public List<String> getList() {
return list;
} public void setList(List<String> list) {
this.list = list;
} }

Jihe

在applicationContext.xml里面写

IOC和Aop使用的扩展

代码:

  <!-- list -->
<bean id="list1" class="cn.happy.entity.Jihe">
<property name="list">
<list>
<value>你的肉</value>
<value>你的菜</value>
</list>
</property>
</bean>

applicationContext.xml

测试类Text:

IOC和Aop使用的扩展

代码:

 public class Text {
@Test
public void inner(){
listinner();
}
//list
static void listinner(){
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
Jihe jihe=(Jihe)context.getBean("list1");
System.out.println(jihe.getList());
}

Text

结果:

IOC和Aop使用的扩展

Set:

实体类和List的实体类一样

在applicationContext.xml里面写

IOC和Aop使用的扩展

代码:

         <!-- Set -->
<bean id="set1" class="cn.happy.entity.Jihe">
<property name="set">
<set>
<value>jd</value>
<value>tb</value>
</set>
</property>
</bean>

applicationContext.xml

测试类Text:

IOC和Aop使用的扩展

代码:

 @Test
public void inner(){
setinner();
} //set
static void setinner(){
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
Jihe jihe=(Jihe)context.getBean("set1");
System.out.println(jihe.getSet());
}

Text

结果:

IOC和Aop使用的扩展

Map

实体类和List的也一样

在applicationContext.xml里面写

IOC和Aop使用的扩展

代码:

  <!-- map -->
<bean id="map1" class="cn.happy.entity.Jihe">
<property name="map">
<map>
<entry key="football" value="足球"></entry>
<entry key="basketball" value="篮球"></entry>
</map>
</property>
</bean>

applicationContext.xml

测试类Text:

IOC和Aop使用的扩展

代码:

 public class Text {
@Test
public void inner(){
mapinner();
} //map
static void mapinner(){
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
Jihe jihe=(Jihe)context.getBean("map1");
System.out.println(jihe.getMap());
}

Text

结果:

IOC和Aop使用的扩展

properties

实体类和List的也一样

在applicationContext.xml里面写

IOC和Aop使用的扩展

代码:

     <!-- properties -->

         <bean id="props1" class="cn.happy.entity.Jihe">
<property name="props">
<props>
<prop key="ndr">你的肉</prop>
<prop key="ndc">你的菜</prop>
</props>
</property>
</bean>

applicationContext.xml

测试类Text:

IOC和Aop使用的扩展

代码:

 public class Text {
@Test
public void inner(){
propinner();
} //properties
static void propinner(){
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
Jihe jihe=(Jihe)context.getBean("props1");
System.out.println(jihe.getProps());
}

Text

结果:

IOC和Aop使用的扩展

-------------------------------------------------------------------------------------------------------------------

接下来是!!!

静态代理

代理模式 (静态代理)
接口 :方法
---->RealClass:接口
---->ProxyClass:接口
private 接口类型 接口变量;
public void 同名方法(){
syso("增强处理");
接口变量.同名方法();
}

列表

IOC和Aop使用的扩展

创建一个接口Subject:

IOC和Aop使用的扩展

代码:

 package cn.happy.proxy;

 public interface Subject {
String quest();
}

Subject

在创建一个SubjectText类继承Subject:

IOC和Aop使用的扩展

代码:

 package cn.happy.proxy;

 public class SubjectText implements Subject {

     public String quest() {
return "增强";
} }

SubjectText

在创建一个代理类ProxySubject同样继承Subject:

IOC和Aop使用的扩展

代码:

 package cn.happy.proxy;

 public class ProxySubject implements Subject {
private Subject subject; public Subject getSubject() {
return subject;
} public void setSubject(Subject subject) {
this.subject = subject;
} public String quest() {
System.out.println("代理增强");
return subject.quest();
} }

ProxySubject

测试类Text:

IOC和Aop使用的扩展

代码:

 package cn.happy.Text;

 import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy; import org.junit.Test; import cn.happy.proxy.ProxySubject;
import cn.happy.proxy.Subject;
import cn.happy.proxy.SubjectText; public class Text {
@Test
public void inner(){
Subject sub=new SubjectText();//被代理的对象
ProxySubject proxy=new ProxySubject();//代理对象
proxy.setSubject(sub);
String quest = proxy.quest();
System.out.println(quest);
}
}

Text

结果:

IOC和Aop使用的扩展

动态代理

proxy包里的类和静态代理的一样只是测试类换了

测试类Text:

IOC和Aop使用的扩展

代码:

 package cn.happy.Text;

 import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy; import org.junit.Test; import cn.happy.proxy.ProxySubject;
import cn.happy.proxy.Subject;
import cn.happy.proxy.SubjectText; public class Text {
@Test
public void inner(){ final Subject sub=new SubjectText();
Subject proxy=(Subject) Proxy.newProxyInstance(sub.getClass().getClassLoader(), sub.getClass().getInterfaces(), new InvocationHandler() { public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("增强代码");
return method.invoke(sub, args);
}
});
proxy.quest(); }
}

Text

结果:

IOC和Aop使用的扩展

上一篇:java.util.Map.Entry接口


下一篇:poj 3764 字典树