Spring之Bean管理

什么是Spring Bean?

由Spring框架创建并管理的对象称为bean对象,bean是一个由Spring IoC容器实例化、组装和管理的对象。

Bean管理的方式

Spring的基本Bean管理包括Bean配置,Bean实例化,Bean的依赖注入。

基于xml配置方式

在spring框架xml配置文件中,配置并管理bean对象。
bean标签中属性介绍:
●id:bean的唯一标识符;
●name:bean对象的别名,可以为多个;
●class:bean的实现类的全类名;
●scope:设置bean实例的作用域,该属性有两个值:
①scope=“singleton” 默认值 ,单例的,在整个应用程序中只创建一个对象,在spring框架启动时就创建好了;
②scope=“prototype” 原型的 每次获取时创建一个对象 可以创建多个。
●property:bean标签的子标签,用于调用实体类中的setter()方法完成属性赋值;
●constructor-arg:bean标签的子标签,可以使用该标签传入构造参数进行实例化;
●value:用于直接给定一个常量;
●ref:用于指定某个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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--配置需要让Spring进行管理的类-->
    <bean id="admin" name="admin1" class="Admin全类名">
        <!--通过get,set方法注入时,类中必须要有该方法-->
        <property name="id" value="10"></property>
        <property name="account" value="admin"></property>
        <!--通过构造方法注入时,类中必须要有对应的构造方法-->
        <constructor-arg name="id" value="10"></constructor-arg>
        <constructor-arg name="account" value="admin"></constructor-arg>
    </bean>
    
    <bean name="adminDao" class="AdminDao全类名"></bean>

    <bean name="adminService" class="AdminService全类名">
        <property name="adminDao" ref="adminDao"></property><!--注入-->
    </bean>
</beans>

注解方式

1.使用注解前的配置:
①导入注解所需要的jar包;
Spring的注解功能封装在aop包中,我们只需要导入Spring aop jar包即可,由于新版Spring jar包自动导入,此处我们无需再手动导入。
②开启注解扫描;
在spring配置文件中开启注解扫描:

<!--开启注解扫描-->
    <context:component-scan base-package="包名"> </context:component-scan>

2.注解标签介绍:
①@Component,一般用于模型类;

import org.springframework.stereotype.Component;

//<bean id="admin" class="Admin全类名">
@Component(value = "admin")
public class Admin {
   ......
}

②@Service,一般用于service类;

import org.springframework.stereotype.Service;

//<bean name="adminService" class="AdminService全类名">
@Service(value = "adminService")
public class AdminService {
   ......
}

③@Repository,一般用于dao层;

import org.springframework.stereotype.Repository;

//<bean name="adminDao" class="AdminDao全类名">
@Repository(value = "adminDao")
public class AdminDao {
  ......
}

④@Scope,标注bean的作用域;
⑤@Autowired,spring框架提供的一个自动注入注解标签,如果写在字段上年,就不需要再写setter方法。默认情况下要求依赖对象必须存在,如果允许null值,可以设置required=false。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service(value = "adminService")
public class AdminService {

    @Autowired
    AdminDao adminDao;//依赖注入

    ......
}

那么该标签是如何去查找需要注入的对象呢?
有两种查找方式:
1.byType : 在spring容器中根据类型查找;
2.byName : 通过名称查找 ,需要结合 @Qualifier(value=“名称”),value 属性用于指定要匹配的 Bean 的 id 值。
⑥@Resource
该注解标签功能与@Autowired相同:
1.byType :@Resource;
2.byName :@Resource(name=" "),name用于指定要匹配的 Bean 的 id 值。
但是该标签是JDK中的,Spring提供了对jdk 中@Resource 注解的支持。

以上两种方式对比

1.xml方式:
优点:配置和代码是分离的,在xml文件中做修改,无需编译代码,只需重启服务器即可将新的配置加载;
缺点:编写麻烦,效率低,大型项目过于复杂。
2.注解方式:
优点:方便,直观,高效,代码少;
缺点:以硬编码的方式写入到java代码中,修改是需要重新编译代码的。

依赖注入

在Spring创建对象时,还需要给对象的属性进行初始化赋值,这个过程称为依赖注入(DI Dependency Injection)。所谓依赖注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。
依赖注入的方式:
1.构造器方法注入:
在bean标签内部使用 constructor-arg标签注入的方式。

<bean id="admin" name="admin1" class="Admin全类名">
        <!--通过构造方法注入时,类中必须要有对应的构造方法
        一个constructor-arg注入一个参数
        构造方法中有几个需要注入的参数就需要几个constructor-arg-->
        <constructor-arg name="id" value="10"></constructor-arg>
        <constructor-arg name="account" value="admin"></constructor-arg>
</bean>

2.set方法注入:
必须要有一个无参的构造方法,否则只能用构造方法构造。
在bean标签内部使用 constructor-arg标签注入的方式。

<bean id="admin" name="admin1" class="Admin全类名">
        <!--通过get,set方法注入时,类中必须要有该方法-->
        <property name="id" value="10"></property>
        <property name="account" value="admin"></property>
</bean>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值