以下学习笔记:
IOC:
Inversion of Control
控制反转,就是对象本身不是自己去创建,而是由外部容器去创建和维护,我们去使用。
本质:获得依赖对象的过程被反转了。
DI:
Dependency Injection
依赖注入(实现IOC的方式)
方式:
1.XML
2.注解
把对象之间的依赖关系,通过依赖注入(赋值...)来完成
本质:IOC容器在运行期间,动态的将某种依赖关系注入到对象中。
IOC对象 = Bean
Bean的配置:XML <bean id = "aaa" class = " com.xx.xx.xx..">
过程:
1.Before:
(1)XML: 构造器传入springXmlPath,子类中 super("classpath*:spring-ioc.xml")
(2) context在before()中加载xml文件,创建上下文--context,也就是spring的容器
(3) 启动容器context
(4) 启动之后,会查找配置文件中配置的信息,(比如bean),并将信息解析,装载到spring的上下文context中
(5) 通过context.getBean() 获取相应的对象,子类中就是super.getBean("aaa"); ,返回他的对象
--------------------
Bean容器初始化
涉及的包:
生产Bean: org.springframework.beans -- BeanFactory提供配置结构和基本功能,加载并初始化Bean
保存Bean: org.springframework.context -- ApplicationConext八寸了Bean对象并在spring中被广泛应用
初始化ApplicationContext的几种方式
1.加载本地文件(磁盘目录)
2.Classpath(工程的相对路径)
3.web应用中依赖servlet或者listener来初始化
即:
1.FileSystemXmlApplicaionContext context = new FileSystemXmlApplicationContext("F:/workspace/appcontext.xml");
2.ClassPathXmlApplicationContext context = new ClassPathXmlApplicaionContext("classpath:spring-context.xml");
3.
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
--------------------------------------------
Spring的注入
简单地说,就是启动spring容器,加载bean配置的时候,顺便完成了对变量的赋值行为
方式:
1.设值:自动调用类的set方法
2.构造
即:
1.
<?xml version ... encoding...>
<beans ...名称空间>
注意:name是你再service中写的aaaDao这个变量名,ref是下面Dao层的beand的id
<bean id="aaa" class="com.xxx.xxx.service.AaaServiceImpl">
<property name = "aaaDao" ref="aaaDao">
</bean>
<bean id="aaaDao" class="com.xxx.xxx.dao.AaaDaoImpl"></bean>
</beans>
2.
<?xml version ... encoding...>
<beans ...名称空间>
<bean id="aaa" class="com.xxx.xxx.service.AaaServiceImpl">
<constructor-arg name = "aaaDao" ref="aaaDaoId">
</bean>
<bean id="aaaDaoId" class="com.xxx.xxx.dao.AaaDaoImpl"></bean>
</beans>
-------------------------------------------------------------
Test
@RunWith(BlockJUnit4ClassRunner.class)
public class TestXxx extends UnitTestBase{
public Test(){
super("classpath:spring-injection.xml");
}
@Test
public void testSetter(){
XxxService service = super.getBean("aaaService");
}
}
业务逻辑
public interface xxxService
public class xxxServiceImpl implements xxxService{
private xxxDao xxxDao;
//方法一:设值注入
public void setXxxDao(XxxDao xxxDao){
this.xxxDao = xxxDao;
}
//方法二:构造器注入
public XxxServiceImpl(XxxDao xxxDao){
this.xxxDao = xxxDao;
}
}
数据库操作
public interface xxxDao
public class xxxDaoImpl implements xxxDao
--------------------------------------------------------------