Spring注入bean的几种方式以及常用注解

1. 控制反转(IOC)

定义: 把对象的创建、赋值、管理工作交给外部容器实现,对象的创建通过外部资源实现。

1.1 依赖注入

只需要只提供对象名称即可,对象的创建、赋值、查找都交给spring容器实现

1.2 bean创建方式
    <bean id="myTest" class="example.service.MyTest" scope="prototype">

    </bean>
1.3 DI属性注入
1.3.1 set注入
	public class MyTest {
        private String name;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    }

    <bean id="myTest" class="example.service.MyTest">
        <property name="name" value="zhangsan"></property>
        //调用MyTest类中的setName方法,name属性可无
    </bean>
1.3.2 引用类型的set注入
    <bean id="student" class="example.service.Student">
        <property name="name" value="lisi" />
    </bean>

    <bean id="school" class="example.service.School">
        <property name="name" value="changde" />
        <property name="student" ref="student" />//引用student对象
    </bean>
1.3.3 构造注入
    <bean id="student" class="example.service.Student">
        <constructor-arg name="name" value="zhangsan" />
        <constructor-arg name="age" value="123" />
    </bean>
1.3.4 应用类型自动注入
    //引用类型的属性名称和spring容器中<bean>的id名称一样,且数据类型一致
    <bean id="school" class="example.service.School" autowire="byName" >
        <property name="name" value="changde" />
    </bean>
    
    //引用类型的数据类型和spring容器中<bean>的class属性是同源关系,同一个bean.xml中,符合byType条件的bean应当只有一个,注入父子类时应当特别注意
    <bean id="school" class="example.service.School" autowire="byType" >
        <property name="name" value="changde" />
    </bean>
1.4 spring注解
1.4.1 组件扫描器
    <!--指定多个包的三种方式-->
    <!--第一种:使用多组扫描器-->
    <context:component-scan base-package="example.Controller" />
    <context:component-scan base-package="example.Util" />
    <!--第二种:分隔符(;,-->
    <context:component-scan base-package="example.Controller;example.Util" />
    <!--第三种:指定父包-->
    <context:component-scan base-package="example" /> 
1.4.2 @Component

创建对象,等价于的功能,默认名称小写。

1.4.3 @Respository

放在dao的实现类上,表示创建dao对象,dao对象可访问数据库。

1.4.4 @Service

放在service的实现类上,service对象做业务处理,可以有事务等功能。

1.4.5 @Controller

放在控制器类上,创建控制器对象的,能够接受用户提交的参数,显示请求的处理结果。

1.4.6 @Value

属性赋值,无需set方法,也可用于set方法之上。

    @Value("zhangsan")
    private String name;

    @Value("24")
    private int number;

    // 引用类型赋值
    // @Autowired: 通过注解给引用类型赋值,使用自动注入的原理,默认使用byType自动注入
    @Autowired
    private School school;

    // byName自动注入
    @Autowired
    @Qualifier("school") //@Qualifier注解属性值不能为空

    //引用类型是否存在,默认为true,为true时,若引用类型不存在则会抛出异常,bean注入失败
    @Autowired(required = true)

    //设置为false时,若引用类型不存在则为对象为null
    @Autowired(required = false)


1.4.7 @Resource

jdk中的注解,spring框架提供了对这个注解的功能支持,可以使用他给引用类型赋值,使用的也是自动注入的原理,默认是byName,若byName赋值失败,再使用byType。

    @Resource
    private School school;

    @Resource(name = "school") // 只使用byName
    private School school;

代码经常改动使用配置文件,不经常改动使用注解,生产效率方式更高,注解为主,配置文件为辅

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值