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平台下实现这两项技术没有形成可以广泛套用的框架 ...
随机推荐
- [分享] 《步步为营封 Win7》--skyfree
[分享] <步步为营封 Win7>--skyfree Skyfree 发表于 2009-9-13 05:51:32 https://www.itsk.com/thread-20957-1- ...
- 在checkbox中使用.prop; angular中属性的值使用变量问题
1.在checkbox中使用.prop而不使用.attr ,.attr有时并不如愿的改变checkbox的打钩问题 给这个checkbox设置return false就能阻止点击则改变状态的默认行为 ...
- 【Mxnet】----1、使用mxnet训练mnist数据集
使用自己准备的mnist数据集,将0-9的bmp图像分别放到0-9文件夹下,然后用mxnet训练. 1.制作rec数据集 (1).制作list
- MySQL DML 整理
DML(Data Manipulation Language)数据操纵语言statements are used for managing data within schema objects. 由D ...
- table清除样式大全
table{width:100%;text-align:center;border-collapse:collapse;border-spacing:1;border-spacing:0; }tabl ...
- TableView与delegate、dataResource
小梦这几天学习tableView是深有体会了 废话不多说,来一波 首先,创建一个测试项目 如图 创建好,在项目结构中另外弄一个GroupFile,创建storyBoard和CocoaTouch 在st ...
- ubuntu16.04安装jdk,tomcat
ubuntu16.04安装jdk,tomcat 最近装了一下tomcat,网上的教程很多,我也试了很多次,但是有一些教程关于tomcat配置是错误的,让我走上了歧途.差点重装系统,还好王总及时出手帮助 ...
- c语言迷宫游戏的实现
// // main.c // 迷宫游戏代码实现 // #include <stdio.h> #define ROW 6 //宏定义行 #define COL 6 //宏定义列 /** * ...
- Objective-C( Foundation框架 一 NSNumber(NSValue))
NSNumber: 是OC中处理数字的一个类 NSValue是NSNumber的子类 如何处理: 把int,float,double 包装成一个对象 使用NSNumber的好处: 可以把基本数据类型 ...
- [原创]WPF资源Binding自定义集合类。
简单介绍一下Wpf资源字典: 每个WPF界面元素都有一个名为Resource的属性,这个属性继承至FrameworkElement类,其类型为ResourceDictionary.ResourceDi ...