JavaEE开发框架SSM 003Bean

Spring中的Bean你可以认为是任何一个POJO类

如果想要实现IOC就得使用容器,那么容器怎么知道你有哪些类呢?你得通过某种方式告诉容器,我有叫做什么什么的类,它的位置在哪里哪里。

 

常用的配置Bean的方法就是使用xml进行配置

 

常用的bean的属性,或者字段有以下这些:

常见的属性是id和class两个属性,id代表这个Bean的名称,就跟你叫张三,他叫李四一样。class代表的是你定义这个类的位置,在哪个文件夹下面,哪个包下面,叫什么名字,顺着这个位置信息我可以找到这个类定义的位置。

<bean id="bean1" class="com.itheima.Bean1"/>

<bean id="bean2" class="com.itheima.Bean2"/>

 

Bean的实例化

 

常见的Bean的实例化方式有三种,构造函数实例化(常用),静态工厂实例化,实例工厂实例化

 

1. 构造函数实例化

使用无参构造方法进行实例化。

创建一个POJO

注册一个Bean

测试一下

完全没有问题。

 

2. 静态实例工厂实例化

根据设计模式的说法,我们可以通过静态工厂来创建对象。

创建一个普通的POJO

public class Bean2{

}

创建实例工厂

注册到容器中

注意了!这里配置Bean的时候,路径是静态工厂类的路径,还配置了factory-method来指定使用哪个方法实例化对象。

测试一下

 

3.实例工厂实例化

使用实例化工厂再去实例化对象

创建一个POJO

public class Bean3{

}

创建实例工厂

注册到容器

注意了!先注册了实例工厂的Bean,然后,在需要实例化的Bean中设置factory-bean引用上述的实例工厂Bean,设置factory-method设置实例化对象调用的实例化工厂的方法名。

测试一下

 

小结:

使用构造函数进行依赖注入是比较常用的方法,简单。

使用静态工厂进行配置的时候,只需要配置静态工厂方法即可,路径是静态工厂的路径,使用factory-method来指定方法名。

使用实例工厂进行配置的时候,需要配置实例工厂类,也需要配置待实例化的类,添加factory-bean引用实例工厂的Bean,使用factory-method配置实例化的时候需要调用的方法。

 

 

Bean的作用域

 

 

默认情况下,是singleton,全局就一个Bean的实例,也就是单例,对于无会话状态的Bean是最合适的。

prototype就是另外一个极端了,每次需要创建的时候,他都会new一个实例出来。

后面的几种就是分情况了,常用的就是request,一次请求有一个实例,还有session同一个浏览器的会话使用一个实例。

 

可以在xml文件注册bean的时候指定scope,默认就是singleton

可以看到,两个对象是同一个:

 

对于prototype:

可以看到是两个完全不同的对象:

 

可以对Bean的生命周期进行管理,使用init-method指定初始化的时候调用的方法,使用destory-method指定bean销毁的时候调用的方法。

 

装配Bean

 

1. 基于xml文件

 

a 使用构造函数进行依赖注入

 

通过构造函数进行注入

指定使用constructor-arg进行注入

使用index确定参数的次序,从0开始。value是简单的值,对于复杂的list需要使用list标签包裹起来。

 

b 使用setter方法进行依赖注入

 

通过setter方法注入

通过property进行注入:

name指定字段的名称,value指定简单值。复杂的list需要使用list包裹。

 

复杂类型的装配:

2. 基于注解

 

注解是最常用的依赖注入的方式了,常见的注解有:

@Component表示一个Bean

@Repository代表数据访问层的Bean

@Service代表业务逻辑层的Bean

@Controller代表控制器Bean

@Autowired对于变量,setter方法,构造方法进行注解,配合进行注入

@Resource作用与@Autowired类似,使用name注解Bean的名称,type注解Bean的类型。

@Qualifier对于多实现的接口进行注入的时候,指定是哪个实现

 

定义一个Dao接口:

定义Dao实现类:

定义Service接口:

定义Service实现类:

这里就使用了@Resource配合依赖注入

修改配置文件:

<?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-4.3.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.3.xsd">
   	<context:annotation-config />
   	<context:component-scan base-package="com.learn.ioc" />
   
</beans>

测试

效果

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值