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平台下实现这两项技术没有形成可以广泛套用的框架 ...
随机推荐
- 一张图看懂单机/集群/热备/磁盘阵列(RAID)
- JavaScript查找数组是否存在指定元素
利用JavaScript的函数有两种方式 1.jQuery jQuery.inArray( value, array [, fromIndex ] ) value 类型: Anything 要查找的值 ...
- 利用mysql_multi来管理多实例:
mysql_multi的现实意义: 1:随着连接数上升,性能会下降,通过多实例来分流大量连接来提高性能. 2:做资源隔离 3:分库分表 mysql_multi是官方管理多实例的一个脚本,利用perl语 ...
- 超级文件搜索器(SuperSearch)
写了个工具,各个分享渠道上传太难了,在这里分享给大家吧! 中文名称:超级文件搜索器 英文名称: SuperSearch 适用对象:硬盘里文件达到数万至数千万级的用户 运行环境:WindowXP,Wi ...
- CSS3的@keyframes用法详解:
CSS3的@keyframes用法详解:此属性与animation属性是密切相关的,关于animation属性可以参阅CSS3的animation属性用法详解一章节. 一.基本知识:keyframes ...
- IIS部署WCF网站服务步骤
一开始在“管理工具”下找不到IIS的快捷方式,是因为系统默认未打开IIS功能,所以首先打开IIS功能: 为避免出现未知的麻烦,建议将IIS下的所有项都勾上: 创建IIS桌面快捷方式: 添加网站托管: ...
- iOS---自动布局
自动布局的发展 1.frame:通过代码计算 frame iPhone3GS \ iPhone4 \ iPhone4S 屏幕的物理尺寸是一样的(无需屏幕适配), 而且一个当时的应用要么是横屏要么是竖屏 ...
- Windows Store App JavaScript 开发:页内导航
页内导航是在一个页面内根据需要加载其他页面的内容,在开发基于JavaScript的Windows应用商店应用时,可以使用WinJS.Navigation.navigate函数传递要加载的页面地址并使用 ...
- 【小月博客】 Html5 上传图片 移动端、PC端通用
在博客园注册账号有些天了,感觉有些许欣慰,自己写的东西有人在看,有人在评论很是开心.(ps: 满足一下虚荣心吧!) 废话不多说了,说一下今天给大家分享的是 html5上传图片.我们是在移动端使用的,但 ...
- 【Linux】【通信】1.ping不通
关于为什么ping不通有很多种原因,但直接的表象就网络之间没有成功进行通讯: 在构建虚拟机和win之间的交互时,主要使用了3种网络模式: 桥接bridge VMnet0 主机host VMne ...