1:Spring的优点
-方便解耦,简化开发,Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理
-AOP编程的支持,Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等工程
-声明式事务的支持,只需要通过配置就可以完成对事务的管理,而无需手动编程
-方便程序的测试,Spring对Junit4支持,可以通过注解方便的测试Spring测试
-方便集成各种优秀框架,Spring不排斥各种优秀的开源框架,其内容提供了对各种优秀框架的直接支持
-降低JavaEE API的使用难度,对Java EE开发中非常难用的一些AIP提供了封装
2:Spring IOC的底层原理实现
使用工厂+反射+配置文件实现程序的解耦
2.1配置文件
<bean id=”us” class=”com.imooc.UserServiceImpl”>
2.2工厂
class FactoryBean{
public static Object getBean(String id){
...
//根据id找到相应相应的类进行反射,创建相应的事例
反射
}
}
3:Spring IOC案例
3.1 UserService
public interface UserService {
public void sayHello();
}
3.2 UserServiceImpl
public class UserServiceImpl implements UserService {
public void sayHello() {
System.out.println("Hello spring");
}
}
3.3 SpringDemo1
public class SpringDemo1 {
@Test
/*
* 传统方式开发
* */
public void demo1(){
//存在耦合关系
UserService userService = new UserServiceImpl();
userService.sayHello();
}
@Test
/*
*Spring方式下实现
*/
public void demo2(){
//创建Spring的工厂
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//通过工厂获取类,需要强制类型转换
UserService userService = (UserService)applicationContext.getBean("userService");
userService.sayHello();
}
}
3.4 applicationContext
<?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">
<!--UserService的创建权交给Spring-->
<bean id="userService" class="com.imooc.ioc.demo1.UserServiceImpl"/>
</beans>
3.5 pom.xml引入的依赖
<!--引入依赖-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<!--引入日志-->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
3.6 HelloTest类中使用UserService类对象
传统方式:
//存在耦合关系
UserService userService = new UserServiceImpl();
userService.sayHello();
Spring IOC方式:
//创建Spring的工厂
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//通过工厂获取类,需要强制类型转换
UserService userService = (UserService)applicationContext.getBean("userService");
userService.sayHello();
4:
-IOC Inverse of Control反转控制的概念,就是将原来在程序中手动创建UserService对象的控制权,交由Spring框架管理,简单地说,就是创建UserService对象控制器被反转到了Spring框架
-DI Dependency Injection依赖注入的概念,就是在Spring创建这个对象的过程中,将对象所依赖的属性注入进入
4.1 UserService
public interface UserService {
//结果调用不了实现类中对属性操作的get(),set()
public void sayHello();
}
4.2 UserServiceImpl
public class UserServiceImpl implements UserService {
//添加属性
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void sayHello() {
System.out.println("Hello spring"+name);
}
}
4.3 SpringDemo1
public class SpringDemo1 {
@Test
/*
* 传统方式开发
* */
public void demo1(){
//存在耦合关系
//UserService userService = new UserServiceImpl();
//设置属性
//接口没有调用set跟get方法,则只能new实现类
UserServiceImpl userService = new UserServiceImpl();
userService.setName("Derrick");
userService.sayHello();
}
@Test
/*
*Spring方式下实现
*/
public void demo2(){
//创建Spring的工厂
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//通过工厂获取类,需要强制类型转换
UserService userService = (UserService)applicationContext.getBean("userService");
userService.sayHello();
}
}
4.4 applicationContext.xml
<!--UserService的创建权交给Spring-->
<bean id="userService" class="com.imooc.ioc.demo1.UserServiceImpl">
<!--设置属性-->
<property name="name" value="Derrick"/>
</bean>