码迷,mamicode.com
首页 > 其他好文 > 详细

IOC和Aop使用的扩展

时间:2016-04-09 16:53:58      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:

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

1.构造注入

 

lib包:

技术分享

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

技术分享

代码:

技术分享
 1 package cn.happy.entity;
 2 
 3 public class User {
 4     private Integer id;
 5     private String name;
 6     private String age;
 7     private String eamil;
 8     
 9     public User(Integer id, String name, String age, String eamil) {
10         this.id = id;
11         this.name = name;
12         this.age = age;
13         this.eamil = eamil;
14     }
15     public User(String name, String age, String eamil) {
16         super();
17         this.name = name;
18         this.age = age;
19         this.eamil = eamil;
20     }
21     public User() {
22     }
23     public User(String name, String age) {
24         this.name = name;
25         this.age = age;
26     }
27     
28     public Integer getId() {
29         return id;
30     }
31     public void setId(Integer id) {
32         this.id = id;
33     }
34     public String getName() {
35         return name;
36     }
37     public void setName(String name) {
38         this.name = name;
39     }
40     public String getAge() {
41         return age;
42     }
43     public void setAge(String age) {
44         this.age = age;
45     }
46     public String getEamil() {
47         return eamil;
48     }
49     public void setEamil(String eamil) {
50         this.eamil = eamil;
51     }
52     @Override
53     public String toString() {
54         return "User [id=" + id + ", name=" + name + ", age=" + age
55                 + ", eamil=" + eamil + "]";
56     }
57     
58 }
User

 

在applicationContext.xml里面写

技术分享

约束-头:

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

技术分享
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xmlns:aop="http://www.springframework.org/schema/aop"
 5     xmlns:p="http://www.springframework.org/schema/p"
 6     xsi:schemaLocation="
 7         http://www.springframework.org/schema/beans 
 8         http://www.springframework.org/schema/beans/spring-beans.xsd
 9          http://www.springframework.org/schema/aop
10          http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
11         ">
applicationContext.xml

 

代码:

技术分享
1 <bean id="user1" class="cn.happy.entity.User">
2             <constructor-arg index="0" type="java.lang.String" value="LXL"></constructor-arg>
3             <constructor-arg index="1" type="java.lang.String" value="12"></constructor-arg>
4         </bean>
applicationContext.xml

测试类:Text

技术分享

 

代码:

技术分享
 1 public class Text {
 2     @Test
 3     public void inner(){
 4         gouinner();
 5     }
 6     //p命名空间注入
 7     static void gouinner(){
 8         ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
 9         User user=(User)context.getBean("user1");
10         System.out.println(user);
11     }
text

 

结果:

 

2.P命名空间注入

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

在applicationContext.xml里面写

技术分享

 

代码:

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

测试类Text:

技术分享

代码:

技术分享
 1     @Test
 2     public void inner(){
 3         Pinner();
 4     }
 5     //构造注入
 6     static void Pinner(){
 7         ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
 8         User user=(User)context.getBean("user2");
 9         System.out.println(user);
10     }
text

 

结果:

技术分享

3.注入集合的属性

List

实体类Jihe:

技术分享

代码:

技术分享
 1 package cn.happy.entity;
 2 
 3 import java.util.List;
 4 import java.util.Map;
 5 import java.util.Properties;
 6 import java.util.Set;
 7 
 8 public class Jihe {
 9     private List<String> list;
10     
11     private Set<String> set;
12     
13     private Map<String,String> map;
14     
15     private Properties props;
16     
17     public Properties getProps() {
18         return props;
19     }
20 
21     public void setProps(Properties props) {
22         this.props = props;
23     }
24 
25     public Map<String, String> getMap() {
26         return map;
27     }
28 
29     public void setMap(Map<String, String> map) {
30         this.map = map;
31     }
32 
33     public Set<String> getSet() {
34         return set;
35     }
36 
37     public void setSet(Set<String> set) {
38         this.set = set;
39     }
40 
41     public List<String> getList() {
42         return list;
43     }
44 
45     public void setList(List<String> list) {
46         this.list = list;
47     }
48 
49 }
Jihe

在applicationContext.xml里面写

技术分享

代码:

技术分享
1  <!-- list -->
2         <bean id="list1" class="cn.happy.entity.Jihe">
3             <property name="list">
4                 <list>
5                  <value>你的肉</value>
6                  <value>你的菜</value>
7              </list>  
8             </property>     
9         </bean>
applicationContext.xml

测试类Text:

技术分享

代码:

技术分享
 1 public class Text {
 2     @Test
 3     public void inner(){
 4         listinner();
 5     }
 6     //list
 7     static void listinner(){
 8         ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
 9         Jihe jihe=(Jihe)context.getBean("list1");
10         System.out.println(jihe.getList());
11     }
Text

 

 

结果:

技术分享

Set:

实体类和List的实体类一样

在applicationContext.xml里面写

技术分享

 

代码:

技术分享
 1   
 2         <!-- Set -->
 3         <bean id="set1" class="cn.happy.entity.Jihe">
 4         <property name="set">
 5              <set>
 6                  <value>jd</value>
 7                  <value>tb</value>
 8              </set>       
 9              </property>
10         </bean>
applicationContext.xml

 

测试类Text:

技术分享

 

代码:

技术分享
 1 @Test
 2     public void inner(){
 3         setinner();
 4     }
 5     
 6     //set
 7         static void setinner(){
 8             ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
 9             Jihe jihe=(Jihe)context.getBean("set1");
10             System.out.println(jihe.getSet());
11         }
Text

结果:

技术分享

Map

实体类和List的也一样

在applicationContext.xml里面写

技术分享

 

代码:

技术分享
1  <!-- map -->
2          <bean id="map1" class="cn.happy.entity.Jihe">
3          <property name="map">
4              <map>
5                 <entry key="football" value="足球"></entry>
6                 <entry key="basketball" value="篮球"></entry>
7              </map>       
8              </property>
9         </bean>
applicationContext.xml

测试类Text:

技术分享

 

代码:

技术分享
 1 public class Text {
 2     @Test
 3     public void inner(){
 4         mapinner();
 5     }
 6     
 7         //map
 8         static void mapinner(){
 9                     ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
10                     Jihe jihe=(Jihe)context.getBean("map1");
11                     System.out.println(jihe.getMap());
12         }
Text

结果:

技术分享

 

properties

实体类和List的也一样

在applicationContext.xml里面写

技术分享

代码:

技术分享
 1     <!-- properties -->
 2            
 3         <bean id="props1" class="cn.happy.entity.Jihe">
 4          <property name="props">
 5                  <props>
 6                     <prop key="ndr">你的肉</prop>
 7                     <prop key="ndc">你的菜</prop>
 8                 </props>
 9              </property>
10         </bean>
applicationContext.xml

测试类Text:

技术分享

代码:

技术分享
 1 public class Text {
 2     @Test
 3     public void inner(){
 4         propinner();
 5     }
 6     
 7         //properties
 8         static void propinner(){
 9             ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
10             Jihe jihe=(Jihe)context.getBean("props1");
11             System.out.println(jihe.getProps());
12 }
Text

结果:

技术分享

 

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

 

接下来是!!!

静态代理

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

 

列表

技术分享

 

创建一个接口Subject:

技术分享

代码:

技术分享
1 package cn.happy.proxy;
2 
3 public interface Subject {
4     String quest();
5 }
Subject

在创建一个SubjectText类继承Subject:

技术分享

代码:

技术分享
1 package cn.happy.proxy;
2 
3 public class SubjectText implements Subject {
4 
5     public String quest() {
6         return "增强";
7     }
8 
9 }
SubjectText

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

技术分享

代码:

技术分享
 1 package cn.happy.proxy;
 2 
 3 public class ProxySubject implements Subject {
 4     private Subject subject;
 5     
 6     
 7     public Subject getSubject() {
 8         return subject;
 9     }
10 
11 
12     public void setSubject(Subject subject) {
13         this.subject = subject;
14     }
15 
16 
17     public String quest() {
18         System.out.println("代理增强");
19         return subject.quest();
20     }
21 
22 }
ProxySubject

 

测试类Text:

技术分享

代码:

技术分享
 1 package cn.happy.Text;
 2 
 3 
 4 import java.lang.reflect.InvocationHandler;
 5 import java.lang.reflect.Method;
 6 import java.lang.reflect.Proxy;
 7 
 8 import org.junit.Test;
 9 
10 import cn.happy.proxy.ProxySubject;
11 import cn.happy.proxy.Subject;
12 import cn.happy.proxy.SubjectText;
13 
14 public class Text {
15     @Test
16     public void inner(){
17         Subject sub=new SubjectText();//被代理的对象
18         ProxySubject proxy=new ProxySubject();//代理对象
19         proxy.setSubject(sub);
20         String quest = proxy.quest();
21         System.out.println(quest);
22     }
23 }
24     
Text

结果:

技术分享

 

动态代理

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

测试类Text:

技术分享

 

代码:

技术分享
 1 package cn.happy.Text;
 2 
 3 
 4 import java.lang.reflect.InvocationHandler;
 5 import java.lang.reflect.Method;
 6 import java.lang.reflect.Proxy;
 7 
 8 import org.junit.Test;
 9 
10 import cn.happy.proxy.ProxySubject;
11 import cn.happy.proxy.Subject;
12 import cn.happy.proxy.SubjectText;
13 
14 public class Text {
15     @Test
16     public void inner(){
17 
18         
19      final Subject sub=new SubjectText();
20         Subject proxy=(Subject) Proxy.newProxyInstance(sub.getClass().getClassLoader(), sub.getClass().getInterfaces(), new InvocationHandler() {
21             
22             public Object invoke(Object proxy, Method method, Object[] args)
23                     throws Throwable {
24                     System.out.println("增强代码");
25                 return method.invoke(sub, args);
26             }
27         });
28             proxy.quest();
29         
30     }
31 }
Text

结果:

技术分享

 

IOC和Aop使用的扩展

标签:

原文地址:http://www.cnblogs.com/xiaotangtang/p/5371916.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!