SpringIOC的bean自动注解(Resource,Autowired)

Posted 韶光不负

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringIOC的bean自动注解(Resource,Autowired)相关的知识,希望对你有一定的参考价值。

目录

注解方式注入 Bean

@Resource注解

@Resource注解实现自动注入(反射机制)

实现方式:

@Autowired实现bean自动注入

实现Bean对象的自动注入

使用方法与Resource方法一样

出现的问题(org.xml.sax.SAXParseException; lineNumber: 11; columnNumber: 36; schema_reference.4)


注解方式注入 Bean


对于bean的注入,除了使用xml配置以外,可以使用注解配置。注解的配置,可以简化配置文件,提高开发的速度,使程序看上去更简洁。对于注解的解释,Spring对于注解有专门的解释器,对定义的注解进行解析,实现对应bean对象的注入。通过反射技术实现。
 

@Resource注解

@Resource注解实现自动注入(反射机制)

  1. 默认根据属性字段名称查找对应的 bean对象(属性字段的名称与bean标签的id属性值相等)·如果属性字段名称未找到,则会通过类型(Class类型)查找
  2. 属性可以提供set方法,也可以不提供set方法
  3. 注解可以声明在属性级别或set方法级别
  4. 可以设置name属性,name属性值必须与bean标签的id属性值一致;如果设置了name属性值,就只会按照name属性值查找bean对象
  5. 当注入接口时,如果接口只有一个实现则正常实例化;如果接口存在多个实现,则需要使用name属性指定需要被实例化的bean对象

实现方式:

一,配置xml文件

<?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">


        <!--
            使用注解方式进行创建对象
            1.开启注解扫描

            含义:开启注解扫描,指定了 base-package 扫描指定的包,扫描包与子包中所有的类
            查看类上是否有指定的注解, 如果类上有指定的注解,那么就创建给类对象,
            放到spring容器中
        -->
        <context:component-scan base-package="com.lsf"/>
        

        <!--创建需要用到的bean -->
        <bean id="userService" class="com.lsf.service.UserService"></bean>
         <!--自动注解需要用到的bean -->
        <bean id="userdao" class="com.lsf.dao.Userdao"></bean>
</beans>

二,使用注解

package com.lsf.service;

//导入需要的类
import com.lsf.dao.Userdao;
//导入注解
import javax.annotation.Resource;

public class UserService 
    //使用自动注入(尽量属性字段名称与配置文件中的bean的id一致)
    @Resource
    private Userdao userdao;

    public void test()
        System.out.println("userService.....");
        userdao.test();
    

三,启动

package com.lsf;

import com.lsf.service.UserService;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Starter 

    public static void main(String[] args) 
        BeanFactory factory = new ClassPathXmlApplicationContext("spring.xml");
        UserService userService = (UserService) factory.getBean("userService");
        userService.test();
    

现象

 

@Autowired实现bean自动注入

实现Bean对象的自动注入

  1. 默认根据类型(CLass)查找,与属性字段名无关
  2. 属性字段可以提供set方法也可以不提供
  3. 注解可以声明在属性字段级别或set方法级别
  4. 如果需要役置属性字段通过id属性值查找,则需要结合(Qualifier注解使用,并设置cQualifier注解的vaLue属性值(value属性值与bean的id属性值一致)


使用方法与Resource方法一样

出现的问题(org.xml.sax.SAXParseException; lineNumber: 11; columnNumber: 36; schema_reference.4)

出现问题的原因:xml配置文件出现了问题,导致找不到文档

解决办法(自己打容易打错所有,还是使用复制粘贴吧):

xml配置

<?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">


        <!--
            使用注解方式进行创建对象
            1.开启注解扫描

            含义:开启注解扫描,指定了 base-package 扫描指定的包,扫描包与子包中所有的类
            查看类上是否有指定的注解, 如果类上有指定的注解,那么就创建给类对象,
            放到spring容器中
        -->
        <context:component-scan base-package="com.lsf"/>

        <bean id="userService" class="com.lsf.service.UserService"></bean>
        <bean id="userdao" class="com.lsf.dao.Userdao"></bean>
</beans>

以上是关于SpringIOC的bean自动注解(Resource,Autowired)的主要内容,如果未能解决你的问题,请参考以下文章

SpringIOC的bean自动注解(Resource,Autowired)

Spring IOC高级

SpringIOC----注解

spring基础之三-;SpringIOC的注解应用

Spring面试

Spring面试