Spring框架学习之IOC
先前粗浅地学过Spring框架,但当时忙于考试及后期实习未将其记录,于是趁着最近还有几天的空闲时间,将其稍微整理一下,以备后期查看。
Spring相关知识
spring是J2EE应用程序框架,是轻量级的IoC和AOP的容器框架,主要是针对javaBean的生命周期进行管理的轻量级容器。可单独使用,通常也与其他框架整合使用,例如SSH、SSM。
IOC:控制反转
控制权由对象本身转向容器;由容器根据配置文件去创建实例并创建各个实例之间的依赖关系。等同于DI依赖注入
AOP:面向切面
IOC
下面举个例子HelloWOrld:
1 package per.zww.spring.beans; 2 3 public class HelloWorld { 4 public HelloWorld() { 5 // TODO Auto-generated constructor stub 6 System.out.println("Constractor..."); 7 } 8 9 private String name; 10 11 public void setName(String name) { 12 System.out.println("setter..."); 13 this.name = name; 14 } 15 16 public void hello() { 17 System.out.println("hello:"+name); 18 } 19 }
如果我们不使用IOC而调用类里面的hello()的话,我们的Main类会这样写:
1 public class Main { 2 public static void main(String[] args) { 3 HelloWorld helloWorld=new HelloWorld(); 4 helloWorld.setName("zhaoww"); 5 helloWorld.hello(); 6 } 7 }
而当我们使用IOC,则不需要自行new一个对象,也不需setName。只需要这样写:
public class Main { public static void main(String[] args) { //创建IOC容器,类路径加载配置文件 ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml"); //获取bean,也可用其他方法 HelloWorld helloWorld2= (HelloWorld) applicationContext.getBean("helloWorld"); helloWorld2.hello(); } }
当然我们还是要配置xml文件的,配置文件如下:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 5 6 <!-- 配置bean --> 7 <bean id="helloWorld" class="per.zww.spring.beans.HelloWorld"> 8 <property name="name" value="zhaoww"></property> 9 </bean> 10 11 </beans>
具体来看:
Spring提供两种的IOC容器
1.BeanFactory
2.ApplicationContext [基本都用这个]
是BeanFactory的子接口
注入方式
1.属性注入 最常用
2.构造器注入
默认index顺序
同时也可通过指定参数类型以区分重载的构造器
3.工厂注入[不常使用]
bean的配置要点
1.通过反射的机制,所以必须有无参构造器
2.name 必须与getter相对应
3.property除了value,还能用ref指向一个对象
4.可用p标签等简化书写
自动装配[个人觉得不建议使用]
autowire(同样是在xml文件里的)
1.byType >1 抛出异常
2.byName setter属性名匹配则装配,否则不装配(ref)
3.构造器(不推荐)
Bean之间关系
1.继承
parent属性
2.依赖
depends-on属性,依赖的Bean必须在本Bean实例化之前创建好
Bean的作用域
scope 默认的作用域,Bean是单例的
<bean id="" class="" scope="singleton/prototype(原型)/request(少)/session(少)"></bean>
singleton:容器初始化时是便已创建好Bean,单例
prototype:容器初始化时不创建Bean实例,而在每次请求时创建新的实例 (ps:struts2整合)