IOC和Aop使用的扩展

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

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="[email protected]"/>
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

结果:

时间: 2024-10-19 01:32:20

IOC和Aop使用的扩展的相关文章

Spring IOC及AOP学习总结

一.Spring IOC体系学习总结: Spring中有两个容器体系,一类是BeanFactory.另一类是ApplicationContext.BeanFactory提供了基础的容器功能.ApplicationContext则是基于BeanFactory建立的一套更加丰富的容器体系,基于ApplicationContext构建了Spring AOP体系(基于AOP体系又构建了声明式事务模型),I18n的支持,基于观察者模式的事件模型,多渠道的Bean资源的载入(比如从文件系统,从interne

Spring入门导读——IoC和AOP

和MyBatis系列不同的是,在正式开始Spring入门时,我们先来了解两个关于Spring核心的概念,IoC(Inverse of Control)控制反转和AOP()面向切面编程. 1.IoC(Inversion of Control)控制反转 什么是控制反转呢?可以这么通俗的来解释,我们通常写代码当一个类会关联另一个类是会直接在这个类里new,例如: 1 package day_30_spring; 2 3 /** 4 * @author 余林丰 5 * 6 * 2016年10月30日 7

Java深度历险(四) 深入浅出-----IOC AND AOP

IOC就是Inversion of Control,控制反转.在Java开发中,IoC意味着将你设计好的类交给系统(容器)来控制实现,而不是在你的类内部控制.这称为控制反转. 本人理解:就是把原本你自己制造,使用的对象,现在交由别人制造,而通过构造函数(容器来管理),setter方法或方法(这里指使用这个对象的方法)参数的方式传给自己,由自己使用. 实例说明形象理解IOC 要设计一个Girl和一个Boy类,其中Girl有recognize方法,即Girl想要recognize一个Boy.那么,我

spring的IOC和AOP

spring的核心就是IOC和AOP. IOC(控制反转)和DI(依赖注入)是同一个概念.具体的讲:当某个角色需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例.但在spring中 创建被调用者的工作不再由调用者来完成,因此称为控制反转.创建被调用者的工作由spring来完成,然后注入调用者因此也称为依赖注入.所谓依赖,从程序的角度看,就是比如A要调用B的方法,那么A就依赖于B,反正A要用到B,则A依赖于B.举个生活中的例子:通常情况下,假如你有一天在家里口渴了

maven-tomcat7;IOC;AOP;数据库远程连接

[说明]真的是好烦下载插件啊,maven-tomcat7 插件试了好多次都不行,下载不成:部署不成:好不容易从github中得到的springmvc项目也是运行不起来,中间又是查了许多东西,绕着绕着都不知到到那里了,啊啊啊 [说明]明天还有我们郑州这边的分享,按说该到我了,还得好好准备,, 一:今日完成 1)spring建了一个简单的javaweb项目,大概实验了IOC和AOP的功能 不过到后面springmvc运行的时候,因为修改了server.xml文件,出现了好多问题,tomcat启动不了

spring的IOC和AOP详细讲解

1.解释spring的ioc? 几种注入依赖的方式?spring的优点? IOC你就认为他是一个生产和管理bean的容器就行了,原来需要在调用类中new的东西,现在都是有这个IOC容器进行产生,同时,要是产生的是单例的bean,他还可以给管理bean的生命周期! spring的IOC有三种注入方式 : 第一是根据属性注入 也叫set方法注入: 第二种是根据构造方法进行注入: 第三种是根据注解进行注入,这种方式我认为比较好,方便,要是bean多的话,使用前两种方式会使得配置文件过于臃肿. Spri

Spring 的IOC 和Aop

Spring 的IOC 和Aop 在ApplicationContext.xml中,bean的scope属性默认是singleton,即默认是单例 Spring容器创建的时候,会将所有的配置的bean对象创建,默认bean都是单例的, 代码通过getBean()方法从容器获取指定的bean实例,容器首先会调用Bean类的无参构造器,创建实例对象 bean的作用域 scope=“prototype” 原型模型(N个对象),真正使用时才会创建,没获取一次,都会创建不同的对象 scopr="singl

spring - ioc和aop

1.程序中为什么会用到spring的ioc和aop 2.什么是IOC,AOP,以及使用它们的好处,即详细回答了第一个问题 3.原理 关于1: a:我们平常使用对象的时候,一般都是直接使用关键字类new一个对象,那这样有什么坏处呢?其实很显然的,使用new那么就表示当前模块已经不知不觉的和 new的对象耦合了,而我们通常都是更高层次的抽象模块调用底层的实现模块,这样也就产生了模块依赖于具体的实现,这样与我们JAVA中提倡的面向接口面向抽象编程是相冲突的,而且这样做也带来系统的模块架构问题.很简单的

IOC和AOP的基本概念

一.什么是IOC IoC就是Inversion of Control,控制反转.在Java开发中,IoC意味着将你设计好的类交给系统去控制,而不是在你的类内部控制.这称为控制反转. 下面我们以几个例子来说明什么是IoC 假设我们要设计一个Girl和一个Boy类,其中Girl有kiss方法,即Girl想要Kiss一个Boy.那么,我们的问题是,Girl如何能够认识这个Boy? 在我们中国,常见的MM与GG的认识方式有以下几种 1 青梅竹马: 2 亲友介绍: 3 父母包办 那么哪一种才是最好呢? 青