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平台下实现这两项技术没有形成可以广泛套用的框架 ...
随机推荐
- HTML5 十大新特性(九)——Web Storage
H5的webStorage技术一共提供了两个对象:window.sessionStorage和window.localStorage. 一.window.sessionStorage--会话级存储 存 ...
- Student elective system (VF)
博客插N+文件有些麻烦,索性PDF上传到百度文库 点击获取<数据库系统原理与应用>也有相应的word版本 word版加密密码:(博客链接加密后) 六.附录 数据库设计的基本步骤,按照规范设 ...
- 【转】OPENGL基本API概述
本文信息资源来源于网络,欢迎转载!转载时请保留本文链接(http://www.shopliyang.com.cn/)! OpenGL中的gl库是核心库,glu是实用库,glut是实用工具库. gl是核 ...
- 将项目上传到git上,并在测试服务器上运行
上周我完成了我人生的第一个项目,并将它上传到gitHub上完成了团队合作.下面我将用倒叙的方法记录下,我的这段经历. 星期五,项目完成准备上传gitHub启动测试服务器. 1.git clone 项目 ...
- php gettext 注释
//setlocale(LC_ALL, "en_US.UTF-8"); setlocale(LC_ALL, "zh_CN.UTF-8"); bindtextdo ...
- Android开发--apk的生成
0.前言 此方法为eclipse中生成apk的方法!!!! 1.生成ketstore 在命令提示符中找到java的jdk路径,例如: D:\study software\Java\jdk1.8.0_2 ...
- JS学习笔记01
文章转载pigpigpig4587 的 1.Javascript是区分大小写的语言.也就是说.关键字.变量,函数和所有的标识符都必须采取一致的大小写形式.因为html不严格区分大小写,所以在html中 ...
- centos mongodb cluster install 完全版
分享一则用yum安装的mongodb初始化脚本. install_mongodb.sh会安装mongodb所需的基本环境. 配置副本集的时候会需要辅助文件hosts.conf. 说明:该示例为一主一丛 ...
- ldconfig和ldd用法
一.ldconfig ldconfig是一个动态链接库管理命令,为了让动态链接库为系统所共享,还需运行动态链接库的管理命令--ldconfig. ldconfig 命令的用途,主要是在默认搜寻目录(/ ...
- IO 相关配置参数
INNODB I/O相关配置 记录日志为顺序I/O,刷新日志到数据文件为随机操作.顺序操作性能快于随机IO. innodb_log_file_size innodb_log_files_in_grou ...