Spring(二)IOC:Spring基于XML方式,注解方式两种方式

Spring系列:

 

目录

1.XML配置方式

1.1.实例化Bean的四种方式

1.2.Bean的作用域

1.3.Bean的生命周期

1.4.Bean属性的依赖注入

2.注解配置方式

2.1.Bean的定义(注册)-- 扫描机制

2.2.Bean属性的依赖注入

2.3.Bean的初始化和销毁

2.4. Bean的作用域

3.XML与注解方式混合使用


 

 

1.XML配置方式

1.1.实例化Bean的四种方式

注:有参构造不可以实例化bean

 

 

 

 

 

 

 

 

1.2.Bean的作用域

演示:

【注意】单例是默认值,如果需要单例对象,则不需要配置scope。

 

 

1.3.Bean的生命周期

通过spring工厂,可以控制bean的生命周期。

1.3.1.在xml配置Bean的初始化和销毁方法

通过 init-method属性 指定初始化后的调用方法

通过 destroy-method属性 指定销毁对象前的方法

 

演示:

 

 

 

1.3.2.后处理Bean(BeanPostProcessor接口)(了解)

后处理Bean也称之为Bean的后处理器,作用是:在Bean初始化的前后,对Bean对象进行增强。

它既可以增强一个指定的Bean,也可以增强所有的Bean,底层很多功能(如AOP等)的实现都是基于它的,Spring可以在容器中直接识别调用。

 

 

1.4.Bean属性的依赖注入

1.4.1.属性依赖注入的三种方式

什么是Bean属性的注入?就是对一个对象的属性赋值。有三种方式:

  • 第一种:构造器参数注入
  • 第二种:setter方法属性注入(setter方法的规范需要符合JavaBean规范)
  • 第三种:接口注入

Spring 框架规范中通过配置文件配置的方式,只支持构造器参数注入和setter方法属性注入,不支持接口注入 !

 

1.4.2.方式一:构造器参数注入

 

1.4.3.方式二:setter方法属性注入(推荐)

使用的默认的构造器(无参构造),但必须提供属性的setter方法,使用setter方法也是企业经常使用的属性注入方式。

两步:在类中加入setter方法,在配置文件中使用property

 

1.4.4.p名称空间的使用(了解)

 

 

​​​​​​​1.4.5.spEL表达式的使用(了解)

 

 

 

2.注解配置方式

2.1.Bean的定义(注册)-- 扫描机制

第一步:创建CustomerService.java类

@Component(value="customerService")
public class CustomerService {
	//保存业务方法
	public void save(){
		System.out.println("CustomerService业务层被调用了。。。");
	}
}

1)@Component注解放置到类上

     相当于spring容器中定义:<bean id="customerService" class="cn.itcast.spring.a_ioc.CustomerService">

2)@Component(value="customerService") ,也可以自定义bean的id名字

     如果不写value值,默认value值为类名的首字母小写,即customerService

     相当于spring容器中定义:<bean id="customer" class="cn.itcast.spring.a_ioc.CustomerService">

3)只有value一个属性时,可以写作@Component("customerService"),也可以写作@Component

 

第二步: 配置applicationContext.xml,配置注解开启和注解Bean的扫描。

<?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">
	
	<!-- 开启spring的注解功能 :让注解有效了,识别注解-->
	<context:annotation-config/>

	<!-- 配置注解bean扫描 
		context:component-scan:专门扫描含有@Component注解的类,自动将其作为bean
		base-package:要扫描包的路径,cn.itcast.spring所有子包下的所有类定义注解都有效
	-->
	<context:component-scan base-package="cn.itcast.spring"/>
</beans>

注意:配置注解bean扫描时,会自动开启注解功能,所以如果配置注解扫描可以不配置开启注解功能

 

第三步: 测试

public class SpringTest {
	@Test
	public void test(){
		//spring容器
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
		//获取bean
		CustomerService customerService=(CustomerService) applicationContext.getBean("customerService");
		customerService.save();
	}
}

 

 

扩展优化:

1.注解扫描配置

     配置注解扫描时,会自动开启注解功能,所以如果配置注解扫描可以不配置开启注解功能

 

2.衍生注解的问题

实际开发中,使用的是@Component三个衍生注解(“子注解”),子注解的作用:有分层的意义(分层注解)。

Spring3.0为我们引入了组件自动扫描机制,它可以在类路径底下寻找标注了@Component、@Service、@Controller、@Repository注解的类,并把这些类纳入进spring容器中管理。除了@Component外,Spring提供了3个功能基本和@Component等效的注解

功能介绍:

@Service用于标注业务层组件(如Service层)

@Controller用于标注控制层组件(如struts中的action层)

@Repository用于标注数据访问组件,(如DAO层组件)。

而@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。(比如测试类)

 

 

​​​​​​​2.2.Bean属性的依赖注入

​​​​​​​2.2.1. 简单数据类型依赖注入(了解)

Spring3.0后,提供 @Value注解,可以完成简单数据的注入

 

​​​​​​​2.2.2.复杂数据类型依赖注入

将Dao类的对象注入到Service类进行使用。

注解实现属性依赖注入,将注解加在setXxx方法上 或者 属性定义上 !

1)使用@Value结合SpEL (spring3.0 后用)

 

2)使用@Autowired 结合 @Qualifier,或者单独使用@Autowired

推荐使用这一种,这一种开发中用到最多!

1:单独使用@Autowired:表示按照类型注入,会到spring容器中查找CustomerDao的类型,对应<bean class=””>,class的属性值,如果找到,可以匹配。

2:结合使用@Autowired + @Qualifier:表示按照名称注入,会到spring容器中查找customerDao的名称,对应<bean id=””>,id的属性值,如果找到,可以匹配。

 

3)JSR-250标准(基于jdk) 提供注解 @Resource

1:单独使用@Resource注解,表示先按照名称注入,会到spring容器中查找customerDao的名称,对应<bean id=””>,id的属性值,如果找到,可以匹配。

如果没有找到,则会按照类型注入,会到spring容器中查找CustomerDao的类型,对应<bean class=””>,class的属性值,如果找到,可以匹配,如果没有找到会抛出异常。

:2:如果@Resource注解上添加name名称,使用@Resource注解,则按照名称注入,会到spring容器中查找customerDao的名称,对应<bean id=””>,id的属性值,如果找到,可以匹配。如果没有找到,抛出异常。

 

4)JSR-330标准(jdk) 提供 @Inject (有点麻烦),需要先导入 javax.inject 的依赖包

 

 

2.3.Bean的初始化和销毁

演示:

 

2.4.​​​​​​​ Bean的作用域

 

 

3.XML与注解方式混合使用

演示:

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值