2、IOC容器

该栏目会系统的介绍Spring的知识体系,共分为基础部分、源代码和综合实例等模块,有兴趣的小伙伴可以关注下,如有疑问可以多多评论



容器简介

1、容器概述

  • :把对象的创建和对象之间的调用过程交给Spring容器,从而降低耦合度

2、底层原理

  • 工厂模式
  • XML解析
  • 反射

3、容器实现方式

  • BeanFactory
    • 概述:IOC容器的基本实现,一般不会在开发中使用
    • 特点:加载配置文件时不会创建对象,在获取对象时才创建
  • ApplicationContext
    • 概述: BeanFactory接口的子接口
    • 特点:加载配置文件时就会把对象创建完成
    • 子类:ClassPathXmlApplicationContext

配置文件方式

1、类实例化方式

  • 无参数构造
  • 静态工厂创建
  • 实例工厂创建

2、bean标签

  • 概述:在配置文件中配置对象
  • 常用属性
属性名称作用
id可以根据id值找到对象
name与id属性作用一样
class配置创建对象的类路径
scope配置创建对象的范围,如single、prototype、request、session、globalSession

3、属性注入

  • 概述:在配置文件中配置对象属性
  • 注入方式
    • 使用set方法
    • 使用有参构造
    • 使用接口

4、IOC与DI的比较

  • IOC:控制反转,把创建对象的过程交给Spring进行配置
  • DI:依赖注入,向对象注入属性值,必须在IOC的基础之上完成

5、案例

  • 地址类
public class Address {

    private String city;
    private String district;

    public Address(String city, String district) {
        this.city = city;
        this.district = district;
    }
    
}
  • 用户类
@Setter
public class User {

    private String name;
    private Address address;
    private String[] hobbies;
    private List<String> likeMusic;
    private Map<String, Float> scores;
    private Properties others;
    
}
  • 测试类
public class TestDemo {

    @Test
    public void testAddUser() {
        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
        final User user = (User) context.getBean("user");
        System.out.println(user);
    }

}
  • 配置文件
<?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">

    <!--有参构造Address对象-->
    <bean id="address" class="com.itnear.entity.Address">
        <constructor-arg name="city" value="深圳市"></constructor-arg>
        <constructor-arg name="district" value="宝安区"></constructor-arg>
    </bean>
    <!--无参构造User对象-->
    <bean id="user" class="com.itnear.entity.User">
        <!--字符串-->
        <property name="name" value="Near"/>
        <!--对象-->
        <property name="address" ref="address"/>
        <!--数组-->
        <property name="hobbies">
            <list>
                <value>阅读</value>
                <value>代码</value>
            </list>
        </property>
        <!--列表-->
        <property name="likeMusic">
            <list>
                <value>天空之城</value>
                <value>卡农</value>
            </list>
        </property>
        <!--Map集合-->
        <property name="scores">
            <map>
                <entry key="english" value="100"/>
                <entry key="math" value="100"/>
            </map>
        </property>
        <!--属性-->
        <property name="others">
            <props>
                <prop key="loginTime">2020-01-10 02:19:00</prop>
            </props>
        </property>
    </bean>
</beans>

注解方式

1、类相关注解

注解作用
@Component标识类为组件
@Controller标识WEB层中的类为组件
@Service标识业务层中的类为组件
@Repository标识持久层中的类为组件
@Scope设置对象被创建的类型,如:singleton、prototype
@ComponentScan指定创建容器时要扫描的包

2、属性相关注解

注解作用
@Configuration配置文件
@Import用于导入其他配置类
@PropertySource用于导入.properties配置文件
@Value基本数据类型和字符串
@Resource根据name属性值设置属性值
@Autowired自动装载

3、方法相关注解

注解作用
@Bean把当前方法的返回值做为bean对象,存储spring容器中
@Pre启动服务器前执行方法
@Pos启动服务器后执行方法

4、案例

  • 用户操作类
@Repository("userDao")
public class UserDao {

	public void show(){
		System.out.println("UserDao...........");
	}
	
}
  • 用户服务类
@Service("userService")
@Scope(value="prototype") // 创建对象的类型
public class UserService {

	// @Resource(name = "userDao"),通过name设置属性
	@Autowired
	private UserDao userDao;
	
	public void show(){
		System.out.println(userDao + ".............");
	}
	
}
  • 测试类
public class TestDemo {
	
	@Test
	public void test(){
		ApplicationContext context = 
					new ClassPathXmlApplicationContext("applicationContext.xml");
		UserService user = (UserService)context.getBean("userService");
		user.show();
	}
	
}
  • 配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
						http://www.springframework.org/schema/beans/spring-beans.xsd
    					http://www.springframework.org/schema/context 
    					http://www.springframework.org/schema/context/spring-context.xsd">
	<!-- 开启注解扫描:到包里面扫描类、方法、属性上面是否有注解 -->
	<context:component-scan base-package="cn.itcast"></context:component-scan>
</beans>

整合WEB项目原理

1、描述

  • :把加载配置文件和创建对象的过程,在服务器启动时完成

2、相关技术

  • ServletContext对象
  • ServletContextListents对象

3、操作过程

  • :当服务器启动时,为每个项目创建一个ServletContext对象,当监听器监听到该对象被创建时,会加载Spring配置文件,和创建相关对象,并且把创建的对象存储在ServletContext域对象中
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值