标签:ack location 面向切面 depend 简化 cin 演示 `` 对象
最近在复习 Spring,重新看了一下 IOC 这部分,整理分享出来。
spring 是一站式框架,主要包括以下几个方面:
web 层:springMVC
业务层:事务管理,bean 管理
持久层:JDBC模板,或者使用其他的 ORM 框架
spring 就是一个大工厂,可以将所有对象创建和依赖关系维护,交给 spring 管理。
spring 提供面向切面编程,可以方便的实现对程序进行权限拦截,运行监控等功能。
只需要通过配置就可以完成对事务的管理,而无需手动编程
spring 对 junit4 支持,可以通过注解方便的测试 spring 程序。
在讲 IOC 前,我们先来看一下开发的演变:
? 当我们面向接口编程,创建完接口和实现类后,发现实现类跟接口类之间存在耦合(牵一发而动全身),后来使用工厂模式,类的创建交给工厂类完成,这样实现类又与工厂有耦合,最后采用工厂+反射+配置文件的模式。(工厂类里面的 getBean 方法根据 id 参数返回实例对象,通过反射创建实例。)
所以,IOC 简单的来说就是:将原本在程序中手动创建实现类对象的控制权,交由 spring 框架管理,即创建实现类对象控制权被反正到了 spring框架。
在讲到 IOC 时,往往也会引出 DI,那么两者有什么区别呢?先看 DI 的概念:
DI:依赖注入的概念,就是在Spring创建这个对象的过程,将这个对象所依赖的属性注入进去。
所以 DI 是依赖于 IOC 的,也就是说要先有 IOC,才能有 DI。
我们使用 IntelliJ IDEA 来演示一个快速入门案例。
打开 idea,选中 maven,在 maven 模板中选择创建一个简单的 web 模板,设置 groupId,artifactId,maven 版本等,然后点击 finish,完成创建。
<!-- spring 基本包 -->
<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>
<!-- log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
package com.test.ioc.demo1;
public interface UserService {
public void sayHello();
}
package com.test.ioc.demo1;
public class UserServiceImpl implements UserService{
// 添加属性
private String name;
public void sayHello() {
System.out.println("hello spring" + name);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
<?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.test.ioc.demo1.UserServiceImpl">
<!-- 设置属性 -->
<property name="name" value="李四"></property>
</bean>
</beans>
package com.test.ioc.demo1;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringDemo1 {
@Test
/**
* Spring 方式实现
*/
public void demo1() {
// 创建 Spring 的工厂
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//通过工厂获得类
UserService userService = (UserService) applicationContext.getBean("userService");
userService.sayHello();
}
}
这里我们导入 junit4 的 maven 依赖,直接在测试用例中通过 ```@Test```` 注解的方式,测试 spring 程序。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
输出如下:
标签:ack location 面向切面 depend 简化 cin 演示 `` 对象
原文地址:https://www.cnblogs.com/weixuqin/p/10984286.html