IoC ( Inverse of Control),控制反转,将对象的创建权反转给Spring
spring IOC的快速入门
编写pom文件
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.4.RELEASE</version>
</dependency>
<!--日志-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>RELEASE</version>
</dependency>
</dependencies>
编写接口UserService
public interface UserService {
public void say();
}
编写实现类UserServiceImpl
public class UserServiceImpl implements UserService{
public void say() {
System.out.println("hello spring");
}
}
编写配置文件
在”applicationContext.xml中添加如下代码
<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">
<bean id="userService" class="com.hw.server.impl.UserServiceImpl"/>
</beans>
编写测试代码
@Test
public void testBean(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
// 通过工厂获得类:
UserService userService = (UserService) applicationContext.getBean("userService");
userService.say();
}
Spring框架中的工厂
ApplicationContext接口
使用ApplicationContext工厂的接口,使用该接口可以获取到具体的Bean对象该接口下有两个具体的实现类
* ClassPathXmlApplicationContext -- 加载类路径下的Spring配置文件
* FileSystemXmlApplicationContext -- 加载本地磁盘下的Spring配置文件
BeanFactory工厂(是Spring框架早期的创建Bean对象的工厂接口)
使用BeanFactory接口也可以获取到Bean对象
public void testBean(){
BeanFactory factory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
UserService us = (UserService) factory.getBean("us");
us.sayHello();
}
BeanFactory和ApplicationContext的区别:
* BeanFactory -- BeanFactory采取延迟加载,第一次getBean时才会初始化Bean
* ApplicationContext -- 在加载applicationContext.xml时候就会创建具体的Bean对象的实例,还提供了一些其他的功能
* 事件传递
* Bean自动装配
* 各种不同应用层的Context实现
bean标签的属性
# id属性和name属性
* id -- 给Bean起的名字,在约束中采用ID的约束,唯一,不能出现特殊字符
* name -- 给Bean起的名字,没有采用ID的约束,可以出现特殊字符
* 如果没有id,name可以当id来使用,id和name只能出现一个
# class
* Bean对象的全路径
# scope -- scope属性代表Bean的作用范围
* singleton -- 单例(默认值)
* prototype -- 多例
* request -- 应用在Web项目中,每次HTTP请求都会创建一个新的Bean
* session -- 应用在Web项目中,同一个HTTP Session 共享一个Bean
* globalsession -- 应用在Web项目中,多服务器间的session
# init-method -- 当bean被载入到容器的时候调用init-method属性指定的方法
# destroy-method -- 当bean从容器中删除的时候调用destroy-method属性指定的方法