spring概述、容器、set方法注入依赖关系
来源:互联网 发布:系统加速软件 编辑:程序博客网 时间:2024/06/06 08:52
一.spring是什么?
- 是一个开源的,轻量级的,用来简化应用开发的框架.
1.简化开发
- 例如:简化jdbc的模块-spring jdbc只需要写一两行代码就可以实现java数据库的连接,而且代码质量及高.
当然spring不仅对jdbc做了封装,而且对常用的API做了封装和简化.
使用spring jdbc来访问数据库就不需要咋考虑获取连接和关闭连接了.
2.管理对象
- 不管这个程序有多大,都是一系列对象在相互调用而已.当一个程序复杂就是对象比较多.
spring提供了一个容器,帮我们创建对象以及建立对象之间的依赖关系.这样做的好处是降低对象之间的耦合度方便代码的维护.
3.集成其它框架
- 任务调度的框架 Quartz,spring没有这个框架但是可以利用Spring把它进行集成. spring的设计思想:不发明重复的轮子
- 一站式的框架,就是一个就够了.
二.spring容器
1.Spring容器是什么?
- 是Spring框架中的一个最核心的模块,用于管理对象.包括对象的销毁,创建,和依赖关系等.
2.启动Spring容器?
- step1. 导包.(spring-webmvc)
- step2. 添加配置文件.
applicationContext.xml
- step3. 启动spring容器.
- 出现问题:Description Resource Path Location Type
Archive for required library: ‘C:/Users/wangzhongjie/.m2/repository/org/springframework/spring-beans/3.2.8.RELEASE/spring-beans-3.2.8.RELEASE.jar’ in project ‘Spring1’ cannot be read or is not a valid ZIP file Spring1 Build path Build Path Problem
3.如何创建对象?
- java反射机制
方式一 使用无参构造器(重点)
- step1.各类添加无参构造器(或者缺省构造器).
- step2.配置元素
- step3.调用容器的一个方法getBean来获得对象.
方式二 使用静态工厂方法(了解)
- 通过调用类的静态方法来创建一个对象.
方式三 使用实例工厂方法(了解)
- 通过调用对象的实例方法来创建对象.
4.作用域
- 默认情况下,容器对于某个bean,只会创建一个实例.
ApplicationContext ac = new ClassPathXmlApplicationContext("scope.xml"); ScopeBean s1 = ac.getBean("s1",ScopeBean.class); ScopeBean s2 = ac.getBean("s1",ScopeBean.class); System.out.println(s1 == s2);
- 可以设置scope属性值为prototype,这样容器对于某个bean会创建多个实例.
<!-- scope属性:配置作用域,缺省值是singleton(单例模式) singleton(即一个bean只创建一个实例),如果prototype(即一个bean会创建多个实例). 既是调用几个getBean()方法它就会创建几个 --> <bean id="s1" class="scope.ScopeBean" scope="prototype"></bean>
5.生命周期
- 初始化方法:init-method属性来指定初始化方法名.
spring容器创建对象之后会立即调用初始化方法.
<!-- init-method属性:用来指定初始化方法. spring容器会创建mb1对象,然后会立即调用init方法完成初始化. --> <bean id="mb1" class="scope.MessageBean" init-method="init"/>
- 销毁方法:使用destroy-method属性来指定销毁方法名,
spring容器在关闭之前,会销毁对象,在销毁对象之前,会先调用对象的销毁方法,只有作用域为单利的时候,销毁方法才起作用.
ublic static void main(String[] args) { //启动Spring容器 //ApplicationContext:接口 //AbstractApplicationContext:上面接口的子接口 //ClassPathXmlApplicationContext:实现了上述接口具体类 AbstractApplicationContext ac = new ClassPathXmlApplicationContext("scope.xml"); //获得对象 MessageBean mb1 = ac.getBean("mb1",MessageBean.class); mb1.sendMsg(); //关闭容器 ac.close(); }
<!-- init-method属性:用来指定初始化方法. spring容器会创建mb1对象,然后会立即调用init方法完成初始化. destroy-method属性:用来执行销毁方法 当我们把容器给关闭的时候会销毁对象 --> <bean id="mb1" class="scope.MessageBean" init-method="init" destroy-method="destroy"/>
6.延迟加载(了解)
- Spring容器启动之后,会将所有作用域为单例的bean创建好.并且会调用初始化方法.
- 指定
lazy-init
属性值为true,此时,spring容器对于作用为单例的bean不会再创建响应的实例.<bean id="mb1" class="scope.MessageBean" init-method="init" destroy-method="destroy" lazy-init="true"/>
三.IOC(Inversion Of Control 控制反转)
1.什么是IOC?
- 含义:对象之间的依赖关系,由容器来建立.
2.DI(Dependency Injection 依赖注入)是什么?
- 容器通过调用对象提供的set方法或者构造器来建立依赖关系.
注:IOC是目标,DI是手段.
- 实例代码
package ioc;public class B { public B() { System.out.println("B()"); } public void f1() { System.out.println("B's f1()"); }}
package ioc;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class A { private B b; public B getB() { return b; } public void setB(B b) { System.out.println("setB()"); this.b = b; } public A() { System.out.println("A()"); } public void execute() { System.out.println("execute()"); b.f1(); } //测试set方式的注入 public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("ioc.xml"); A a1 = ac.getBean("a1",A.class); a1.execute(); }}
<bean id="b1" class="ioc.B"/> <!-- property元素:表示使用set方法来注入依赖关系. 其中,name属性指定属性名,ref属性指定属性值(是被注入的bean的id). name="b",就会调用setB()方法,会把b大写然后加上set --> <bean id="a1" class="ioc.A"> <property name="b" ref="b1"/> </bean>
set注入示例
- 接口IB
package ioc;public interface IB { public void f1();}
- 类B
package ioc;public class B implements IB{ public B() { System.out.println("B()"); } public void f1() { System.out.println("B's f1()"); }}
- 类C
package ioc;public class C implements IB{ public C() { System.out.println("C()"); } public void f1() { System.out.println("C's f1()"); }}
- ioc.xml
<bean id="c1" class="ioc.C"/> <bean id="b1" class="ioc.B"/> <bean id="a1" class="ioc.A"> <property name="b" ref="c1"/> </bean>
- 类A加载测试主方法
package ioc;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class A { private IB b; public void setB(IB b) { System.out.println("setB()"); this.b = b; } public A() { System.out.println("A()"); } public void execute() { System.out.println("execute()"); b.f1(); } //测试set方式的注入 public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("ioc.xml"); A a1 = ac.getBean("a1",A.class); a1.execute(); }}
不需要通过改动源代码就可以实现通过spring器来创建对象,并且可以通过改动xml,配置文件来实现对象的依赖关系
阅读全文
0 0
- spring概述、容器、set方法注入依赖关系
- 了解Spring set依赖注入
- Spring-依赖注入之set
- Spring Ioc容器依赖注入
- spring中依赖注入 属性无set方法
- Spring容器框架、spring ioc、两种注入方法set注入与构造器注入
- set方法注入依赖属性
- spring入门(6)---set方法注入依赖之null的注入
- 了解Spring set依赖注入集合Collections
- Spring框架学习【IoC容器依赖注入】
- Spring的IOC容器—依赖注入
- spring容器DI依赖注入对象<三>
- spring依赖注入2、注解概述
- spring依赖注入方法实例
- Spring依赖注入的方法
- spring中的依赖注入方法
- Spring依赖注入,在main方法或junit测试类里获取得Spring容器
- Spring之对象依赖关系(依赖注入Dependency Injection)
- 挪摊啦~
- 拨号VPS的使用
- Mysql创建存储过程
- ELF文件格式与动态链接/静态链接(Linux下 可执行文件的格式)
- CSS——给图像加边框时不会产生位置偏移
- spring概述、容器、set方法注入依赖关系
- 封装
- SpringMVC项目示例创建
- 3-sum问题
- html5shiv.js和respond.min.js
- <IOS>IOS应用内支付IAP从零开始详解,让你少踩坑!
- Docker-note-实现原理
- angularjs指令
- PostgreSQL(四)存储结构