IOC和Aop使用的扩展
下面还有静态代理和动态代理
1.构造注入
lib包:

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

代码:
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里面写

约束-头:
别忘记带这个不然会报错的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

代码:
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里面写

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

代码:
@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
结果:
3.注入集合的属性
List
实体类Jihe:

代码:
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里面写

代码:
<!-- list -->
<bean id="list1" class="cn.happy.entity.Jihe">
<property name="list">
<list>
<value>你的肉</value>
<value>你的菜</value>
</list>
</property>
</bean>
applicationContext.xml
测试类Text:

代码:
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
结果:

Set:
实体类和List的实体类一样
在applicationContext.xml里面写

代码:
<!-- 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:

代码:
@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
结果:

Map
实体类和List的也一样
在applicationContext.xml里面写

代码:
<!-- 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:

代码:
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
结果:

properties
实体类和List的也一样
在applicationContext.xml里面写

代码:
<!-- 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:

代码:
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
结果:

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

创建一个接口Subject:

代码:
package cn.happy.proxy;
public interface Subject {
String quest();
}
Subject
在创建一个SubjectText类继承Subject:

代码:
package cn.happy.proxy;
public class SubjectText implements Subject {
public String quest() {
return "增强";
}
}
SubjectText
在创建一个代理类ProxySubject同样继承Subject:

代码:
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:

代码:
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
结果:

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

代码:
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使用的扩展的更多相关文章
- Spring的IOC和AOP之深剖
今天,既然讲到了Spring 的IOC和AOP,我们就必须要知道 Spring主要是两件事: 1.开发Bean:2.配置Bean.对于Spring框架来说,它要做的,就是根据配置文件来创建bean实例 ...
- Spring IOC AOP的原理 如果让你自己设计IOC,AOP如何处理(百度)
百度的面试官问,如果让你自己设计一个IOC,和AOP,如何设计, 我把IOC的过程答出来了,但是明显不对, (1) IOC 利用了反射,自己有个id,classtype,hashmap,所有的功能都在 ...
- 沉淀再出发:IoC和AOP的本质
沉淀再出发:IoC和AOP的本质 一.前言 关于IoC和AOP这两个概念,如果我们没有深入的理解可以说是根本就不理解Spring这个架构的,同样的由Spring演变出来的Spring Boot和Spr ...
- Spring框架IOC和AOP介绍
说明:本文部分内容参考其他优秀博客后结合自己实战例子改编如下 Spring框架是个轻量级的Java EE框架.所谓轻量级,是指不依赖于容器就能运行的.Struts.Hibernate也是轻量级的. 轻 ...
- 展开说说,Spring Bean IOC、AOP 循环依赖
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 延迟满足能给你带来什么? 大学有四年时间,但几乎所有人都是临近毕业才发现找一份好工作 ...
- spring的IOC和AOP协同工作
看网络上的spring资料,基本都是在讲解IOC和AOP,但是二者是如何协同工作的,说的很少. 粗略调试了下BeanFactory的创建过程,发现是如图所示的大概过程.其中BeanPostProces ...
- spring - ioc和aop
1.程序中为什么会用到spring的ioc和aop 2.什么是IOC,AOP,以及使用它们的好处,即详细回答了第一个问题 3.原理 关于1: a:我们平常使用对象的时候,一般都是直接使用关键字类new ...
- spring的IOC和AOP
spring的IOC和AOP 1.解释spring的ioc? 几种注入依赖的方式?spring的优点? IOC你就认为他是一个生产和管理bean的容器就行了,原来需要在调用类中new的东西,现在都是 ...
- Castle框架中的IOC和AOP机制
反转控制(IOC)和面向切面编程(AOP)技术作为当前比较流行的技术,其优势已受到广泛关注,但是这两项新技术在实际项目上的应用研究却很落后,而且在.NET平台下实现这两项技术没有形成可以广泛套用的框架 ...
随机推荐
- (转)Sqoop中文手册
Sqoop中文手册 1. 概述 本文档主要对SQOOP的使用进行了说明,参考内容主要来自于Cloudera SQOOP的官方文档.为了用中文更清楚明白地描述各参数的使用含义,本文档几乎所有参数 ...
- 设置DataSource后DateGridView不显示的问题
在一个WinForm小程序中,有两处需要用DataGridView控件显示数据.设置DataGridView.DataSource为数据查询结果后,第一个DataGridView可以正常显示数据,而第 ...
- j.APR连接器整体框图(含SSL实现分析)
APR连接器的思路和bio,nio的整体架构也是类似的,可以看到下面的整体框图: 第一个区别是,对于从Acceptor线程中的socket解析这块,无论是nio还是bio都是在Acceptor线程内直 ...
- 首页自动生成静态化html
由于平台老是出现间歇性502.排查发现,php死进程过多耗费大量系统资源. 除了优化代码之外,静态化可以减少php进程.缓解一下服务器压力. 把首页生成html后,出现问题频率下降.所以需要做首页静态 ...
- display:inline、block、inline-block的区别
display:block就是将元素显示为块级元素. block元素的特点是: 总是在新行上开始: 高度,行高以及顶和底边距都可控制: 宽度不设是它的容器的100%,除非设定一个宽度 <div& ...
- select两个关联的下拉列表
今天用到两个关联的select,整理一下代码,仅供参考 如下: <html> <head> <meta charset="UTF-8"> < ...
- 一个在线jpg png转ICO的网站
网站地址: https://lvwenhan.com/convertico/
- window.location.href无法跳转的解决办法
-------------------接收别人做的SSO单点登录项目,无源码,只是点击登出按钮一直不跳转. 原因是: <a href="javascript:;" oncli ...
- 无废话WCF入门教程六[一个简单的Demo]
一.前言 前面的几个章节介绍了很多理论基础,如:什么是WCF.WCF中的A.B.C.WCF的传输模式.本文从零开始和大家一起写一个小的WCF应用程序Demo. 大多框架的学习都是从增.删.改.查开始来 ...
- JS数组常用函数以及查找数组中是否有重复元素的三种常用方法
阅读目录: DS01:常用的查找数组中是否有重复元素的三种方法 DS02:常用的JS函数集锦 DS01.常用的查找数组中是否有重复元素的三种方法 1. var ary = new Array(&qu ...
