一、Ioc 通过Spring配置来创建对象,而不是new的方式
两种方法:配置文件,注解
1.Ioc底层原理
(1)xml配置文件
(2)dom4j解析
(3)工厂设计模式
(4)反射
步骤:
第一步:创建类的.xml文件
<code><bean>/<code>
第二步:创建一个工厂类:使用dom4j解析配置文件+反射
<code>第二步:创建一个工厂类:使用dom4j解析配置文件+反射
public class UserFactory{
public static UserService getUserService(){
//使用dom4j解析配置文件
//根据id值获得class的属性值
String classValue="class属性值";
//使用反射来创建class对象
Class class=Class.forName(classValue);
UserService service=class.newInstatnce();
return service;
}
} public class UserFactory{
public static UserService getUserService(){
//使用dom4j解析配置文件
//根据id值获得class的属性值
String classValue="class属性值";
//使用反射来创建class对象
Class class=Class.forName(classValue);
UserService service=class.newInstatnce();
return service;
}
} /<code>
![SpringIoc和Aop底层原理](http://p2.ttnews.xyz/loading.gif)
通过IOC,我们如果改掉UserService类,只需更改bean里面的配置属性就行了,降低了类之间的耦合度
2.Ioc和DI的区别:
(1)Ioc:控制反转,把创建对象交给Spring进行配置
(2)DI:依赖注入,向类里面的属性中设置值
(3)二者关系:DI不能单独存在,要在Ioc基础之上来完成操作,即要先创建对象才能注入属性值。
3.Spring整合web项目原理
(1)加载Spring核心配置文件
ApplicationContext context=new ClassPathXmlApplicationContext(“bean1.xml”);
加载文件要new一个对象,每次访问都要new对象加载配置,效率低
(2)实现思想:吧加载配置文件和创建对象过程,在服务器启动时候完成
(3)实现原理:
a) ServletContext对象
b) 监听器(ServletContextListener接口)
c) 具体使用:
i. 服务器启动时,为每个项目创建一个ServletContext对象
ii. 使用监听器可以监听到ServletContext在何时创建
iii. 在监听器的,ServletContextListener接口的contextInitialized()方法方法中加载Spring配置文件(括号1中代码),创建对象。
iv. 把创建出来的对象放到ServletContext域对象里面(setAttribute方法)
3.Spring整合web项目原理
(1)加载Spring核心配置文件
ApplicationContext context=new ClassPathXmlApplicationContext(“bean1.xml”);
加载文件要new一个对象,每次访问都要new对象加载配置,效率低
(2)实现思想:吧加载配置文件和创建对象过程,在服务器启动时候完成
(3)实现原理:
a) ServletContext对象
b) 监听器(ServletContextListener接口)
c) 具体使用:
i. 服务器启动时,为每个项目创建一个ServletContext对象
ii. 使用监听器可以监听到ServletContext在何时创建
iii. 在监听器的,ServletContextListener接口的contextInitialized()方法方法中加载Spring配置文件(括号1中代码),创建对象。
iv. 把创建出来的对象放到ServletContext域对象里面(setAttribute方法)
v. 获取对象时,从ServletContext域对象中得到(getAttribute方法)
二、Aop:面向切面,扩展功能时不通过源代码,横向抽取机制。
底层使用动态代理方式---增强方法
具体分两种情况:
(1)有接口的情况:创建接口的实现类的代理对象,jdk动态代理
![SpringIoc和Aop底层原理](http://p2.ttnews.xyz/loading.gif)
SpringIoc和Aop底层原理
欣然
java架构交流群:473984645
1 人赞同了该文章
一、Ioc 通过Spring配置来创建对象,而不是new的方式
两种方法:配置文件,注解
JAVA高级进阶zhuanlan.zhihu.com
1.Ioc底层原理
(1)xml配置文件
(2)dom4j解析
(3)工厂设计模式
(4)反射
步骤:
第一步:创建类的.xml文件
<code><bean>/<code>
第二步:创建一个工厂类:使用dom4j解析配置文件+反射
<code>public class UserFactory{
public static UserService getUserService(){
//使用dom4j解析配置文件
//根据id值获得class的属性值
String classValue="class属性值";
//使用反射来创建class对象
Class class=Class.forName(classValue);
UserService service=class.newInstatnce();
return service;
}
} /<code>
通过IOC,我们如果改掉UserService类,只需更改bean里面的配置属性就行了,降低了类之间的耦合度
2.Ioc和DI的区别:
(1)Ioc:控制反转,把创建对象交给Spring进行配置
(2)DI:依赖注入,向类里面的属性中设置值
(3)二者关系:DI不能单独存在,要在Ioc基础之上来完成操作,即要先创建对象才能注入属性值。
3.Spring整合web项目原理
(1)加载Spring核心配置文件
ApplicationContext context=new ClassPathXmlApplicationContext(“bean1.xml”);
加载文件要new一个对象,每次访问都要new对象加载配置,效率低
(2)实现思想:吧加载配置文件和创建对象过程,在服务器启动时候完成
(3)实现原理:
a) ServletContext对象
b) 监听器(ServletContextListener接口)
c) 具体使用:
i. 服务器启动时,为每个项目创建一个ServletContext对象
ii. 使用监听器可以监听到ServletContext在何时创建
iii. 在监听器的,ServletContextListener接口的contextInitialized()方法方法中加载Spring配置文件(括号1中代码),创建对象。
iv. 把创建出来的对象放到ServletContext域对象里面(setAttribute方法)
3.Spring整合web项目原理
(1)加载Spring核心配置文件
ApplicationContext context=new ClassPathXmlApplicationContext(“bean1.xml”);
加载文件要new一个对象,每次访问都要new对象加载配置,效率低
(2)实现思想:吧加载配置文件和创建对象过程,在服务器启动时候完成
(3)实现原理:
a) ServletContext对象
b) 监听器(ServletContextListener接口)
c) 具体使用:
i. 服务器启动时,为每个项目创建一个ServletContext对象
ii. 使用监听器可以监听到ServletContext在何时创建
iii. 在监听器的,ServletContextListener接口的contextInitialized()方法方法中加载Spring配置文件(括号1中代码),创建对象。
iv. 把创建出来的对象放到ServletContext域对象里面(setAttribute方法)
v. 获取对象时,从ServletContext域对象中得到(getAttribute方法)
二、Aop:面向切面,扩展功能时不通过源代码,横向抽取机制。
底层使用动态代理方式---增强方法
具体分两种情况:
(1)有接口的情况:创建接口的实现类的代理对象,jdk动态代理
(2)没有接口的情况:创建User类的子类的代理对象,cglib动态代理。子类可以通过super调用父类方法
增强:before,after,(前置,后置,异常,最终,环绕增强)
JAVA进阶架构程序员福利:我这里还总结整理了比较全面的JAVA相关的面试资料,都已经整理成了
PDF版,这些都可以分享给大家,关注私信我:【806】,免费领取!
閱讀更多 欣然1013 的文章