摘自《Spring框架技术》
Spring框架是一种非侵入式的轻量级框架
1.非侵入式的技术体现
允许在应用系统中自由选择和组装Spring框架的各个功能模块,并且不强制要求应用系统的类必须从Spring框架的系统API的某个类来继承或者实现某个接口。
2.如何实现非侵入式的设计目标的
1)应用反射机制,通过动态调用的方式来提供各方面的功能,建立核心组间BeanFactory
2)配合使用Spring框架中的BeanWrapper和BeanFactory组件类最终达到对象的实例创建和属性注入
3)优点:允许所开发出来的应用系统能够在不用的环境中自由移植,不需要修改应用系统中的核心功能实现的代码;
1.spring以一种非侵入式的方式(struts2的侵入式与非侵入式的比较,一种继承与不继承,继承的侵入式可以使用继承的方法使用被继承类的所有方法,而创建一个单独的pojo类可以做相关的测试,但是使用不方便,不能切换框架;)侵入式让用户代码产生对框架的依赖,这些代码不能在框架外使用,不利于代码的复用。但侵入式可以使用户跟框架更好的结合,更容易更充分的利用框架提供的功能。
非侵入式的代码则没有过多的依赖,可以很方便的迁移到其他地方。但是与用户代码互动的方式可能就比较复杂。
--------------------------------
2.spring提供的IOC(控制(对象的生命周期创建init-method,销毁 destroy-method)反转(创建对象的权限改变;没有使用spring之前每层之间自己创建一个对象提供给其他类使用比如说在service层创建一个dao对象提供给service使用的,使用spring之后无需创建对象只需将dao这个作为service的一个属性这是一种非侵入式的方式然后在配置文件中配置即可自动创建这个bean对象了)),AOP将组合的耦合度降低
-------------------------
3.spring获取核心容器有如下两种方式:(文件系统的方式就是区分操作系统对于windows的操作系统这个路径写的方法如下:d:java/application.xml.linux下这个路径的写法是"/home/java/application.xml)
ApplicationContext ac=new FileSyetemXmlApplicationContext(绝对路径);
ApplicationContext ac=new ClassPathXmlApplicationContext(src下面的路径)括号中的内容可以是字符串也可以是数组
---------------------------------
spring启动的时候bean对象就已经创建了(--默认情况--下spring启动就是配置文件注册的时候创建所有的bean,所有的bean都是单例,在spring生命周期内只有一个);销毁spring容器需要使用AbstractXmlApplicationContext类才能调用该类的close方法这样正常的关闭spring之后就可以调用配置文件中的属性destroy-method的相关方法,
init-method="init" destroy-method="destroy"
----------------------
单独使用factory-method只能使用静态的方法,也可以通过实例工厂的方式使用factory-method调用相应的产生实例的方法,配合factory-bean(先创建一个实例对象),然后通过工厂的实例调用其方法获取对象,静态工厂直接调用工厂的方法
-----------------------
bean中的属性id与name区别是name中可以有其他特殊字符"/,*等',在spring ioc中请求路径有作用;getbean(id或者name或者class的类型)
-------------------
scope默认的是singleton单例的,prototype(原型)多例.request一次请求来创建一个bean,session在一个会话中。
不想要每次spring启动的时候创建对象可以使用懒加载lazy-init=“true”方式。
-----------------------------
初始化bean的时机有两种:第一是在spring启动的时候所有singleton bean提前进行实例化,另外一种是使用懒加载的方式lazy-init
--------------------------
依赖注入,使用构造器注入constructor其中的属性index的值与构造函数中的顺序有关从0开始,value中设置属性的值,ref中属性bean可以调用另外一个对象
--------------
property与map一样都是key,然后取值getproperty(key)
1.spring以一种非侵入式的方式(struts2的侵入式与非侵入式的比较,一种继承与不继承,继承的侵入式可以使用继承的方法使用被继承类的所有方法,而创建一个单独的pojo类可以做相关的测试,但是使用不方便,不能切换框架;)侵入式让用户代码产生对框架的依赖,这些代码不能在框架外使用,不利于代码的复用。但侵入式可以使用户跟框架更好的结合,更容易更充分的利用框架提供的功能。
非侵入式的代码则没有过多的依赖,可以很方便的迁移到其他地方。但是与用户代码互动的方式可能就比较复杂。
--------------------------------
2.spring提供的IOC(控制(对象的生命周期创建init-method,销毁 destroy-method)反转(创建对象的权限改变;没有使用spring之前每层之间自己创建一个对象提供给其他类使用比如说在service层创建一个dao对象提供给service使用的,使用spring之后无需创建对象只需将dao这个作为service的一个属性这是一种非侵入式的方式然后在配置文件中配置即可自动创建这个bean对象了)),AOP将组合的耦合度降低
-------------------------
3.spring获取核心容器有如下两种方式:(文件系统的方式就是区分操作系统对于windows的操作系统这个路径写的方法如下:d:java/application.xml.linux下这个路径的写法是"/home/java/application.xml)
ApplicationContext ac=new FileSyetemXmlApplicationContext(绝对路径);
ApplicationContext ac=new ClassPathXmlApplicationContext(src下面的路径)括号中的内容可以是字符串也可以是数组
---------------------------------
spring启动的时候bean对象就已经创建了(--默认情况--下spring启动就是配置文件注册的时候创建所有的bean,所有的bean都是单例,在spring生命周期内只有一个);销毁spring容器需要使用AbstractXmlApplicationContext类才能调用该类的close方法这样正常的关闭spring之后就可以调用配置文件中的属性destroy-method的相关方法,
init-method="init" destroy-method="destroy"
----------------------
单独使用factory-method只能使用静态的方法,也可以通过实例工厂的方式使用factory-method调用相应的产生实例的方法,配合factory-bean(先创建一个实例对象),然后通过工厂的实例调用其方法获取对象,静态工厂直接调用工厂的方法
-----------------------
bean中的属性id与name区别是name中可以有其他特殊字符"/,*等',在spring ioc中请求路径有作用;getbean(id或者name或者class的类型)
-------------------
scope默认的是singleton单例的,prototype(原型)多例.request一次请求来创建一个bean,session在一个会话中。
不想要每次spring启动的时候创建对象可以使用懒加载lazy-init=“true”方式。
-----------------------------
初始化bean的时机有两种:第一是在spring启动的时候所有singleton bean提前进行实例化,另外一种是使用懒加载的方式lazy-init
--------------------------
依赖注入,使用构造器注入constructor其中的属性index的值与构造函数中的顺序有关从0开始,value中设置属性的值,ref中属性bean可以调用另外一个对象
--------------
property与map一样都是key,然后取值getproperty(key)