1.Spring概念
Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架。【百度】
2.Spring核心
Spring四个核心:bean、core、context、expression
3.SpringIoC:控制反转
IoC模式,系统中通过引入实现了IoC模式的IoC容器,即可由IoC容器来管理对象的生命周期、依赖关系等,从而使得应用程序的配置和依赖性规范与实际的应用程序代码分开。其中一个特点就是通过文本的配置文件进行应用程序组件间相互关系的配置,而不用重新修改并编译具体的代码。
简单的说,就是将创建对象的控制权反转给了spring,由spring创建对象实例。
通过一个SpringIoC的例子理解:
3.1 新建项目,lib下导入jar包:4个核心,1个依赖
3.2 src下新建包,在包下新建接口类文件,UserService.java.
代码如下:
package com.zrxjuly.demo_springioc;
/**
*
* UserService 接口
* @author zrxJuly
* @createDate 2017-11-19
*
*/
public interface UserService {
public void addUser();
}
3.3 接口实现类 UserServiceImpl.java
package com.zrxjuly.demo_springioc;
/**
* 实现类.
* @author zrxJuly
* @createDate 2017-11-22
*
*/
public class UserServiceImpl implements UserService {
@Override
public void addUser() {
System.out.println("addUser......");
}
}
3.4 Spring配置文件 beans.xml
Spring配置文件
位置:任意,开发中一般在classpath下(src)
名称:任意,开发中常用applicationContext.xml
内容:添加schema约束
位置:任意,开发中一般在classpath下(src)
名称:任意,开发中常用applicationContext.xml
内容:添加schema约束
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 配置service
<bean>:配置需要创建的对象
id:用于之后从spring容器中获取实例时使用
class:需要创建实例的全限定类名
-->
<bean id="userServiceId" class="com.zrxjuly.demo_springioc.UserServiceImpl"></bean>
</beans>
3.5 测试类IoCTest.java
package com.zrxjuly.demo_springioc;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* 测试类.
* @author zrxJuly
* @createDate 2017-11-22
*
*/
public class IoCTest {
@Test
public void testIoc() {
// 从spring容器中获得
String xmlPath = "com/zrxjuly/demo_springioc/beans.xml";
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
UserService userService = (UserService) applicationContext.getBean("userServiceId");
userService.addUser();
}
}
4.依赖注入(Dependency Injection)
IoC可以由不同的方式实现,有依赖查找和依赖注入。
依赖注入:组件不做定位查询,只提供普通的Java方法让容器去决定依赖关系。容器全权负责的组件的装配,它会把符合依赖关系的对象通过JavaBean属性或者构造函数传递给需要的对象。通过JavaBean属性注射依赖关系的做法称为设值方法注入(Setter Injection);将依赖关系作为构造函数参数传入的做法称为构造器注入(Constructor Injection)
4.1 src下新建包,包下新建java文件.BookService.java
4.1 src下新建包,包下新建java文件.BookService.java
package com.zrxjuly.demo_springDI;
public interface BookService {
public abstract void addBook();
}
4.2 BookServiceImpl.java
package com.zrxjuly.demo_springDI;
public class BookServiceImpl implements BookService {
// 接口+setter方法.
private BookDao bookDao;
public void setBookDao(BookDao bookDao) {
this.bookDao = bookDao;
}
@Override
public void addBook() {
this.bookDao.addBook();
}
}
4.3 BookDao.java
package com.zrxjuly.demo_springDI;
public interface BookDao {
public void addBook();
}
4.4 BookDaoImpl.java
package com.zrxjuly.demo_springDI;
public class BookDaoImpl implements BookDao {
@Override
public void addBook() {
System.out.println("add book.............");
}
}
4.5 Spring的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 创建service
<property>:用于属性注入
name:bean的属性名 通过setter方法获得
ref:另一个bean的id值的引用
-->
<bean id="bookServiceId" class="com.zrxjuly.demo_springDI.BookServiceImpl">
<!-- 注入bookDao,id为bookServiceId的bean依赖id为bookDaoId的bean -->
<property name="bookDao" ref="bookDaoId"></property>
</bean>
<!-- 创建dao实例 -->
<bean id="bookDaoId" class="com.zrxjuly.demo_springDI.BookDaoImpl"></bean>
</beans>
4.6 测试类 DITest.java
package com.zrxjuly.demo_springDI;
import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
public class DITest {
@Test
public void testdi() {
String xmlPath = "com/zrxjuly/demo_springDI/beans.xml";
BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource(xmlPath));
BookService bookService = (BookService) beanFactory.getBean("bookServiceId");
bookService.addBook();
}
@Test
public void testDI() {
String xmlPath = "com/zrxjuly/demo_springDI/beans.xml";
// 加载配置文件.
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
BookService bookService = (BookService) applicationContext.getBean("bookServiceId");
bookService.addBook();
}
}