您的位置:首页 > 编程语言 > Java开发

Spring -- 1.IOC,DI,XML

2017-03-21 11:41 537 查看
以下学习笔记:

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

--------------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: