SpringIOC的bean自动注解(Resource,Autowired)
Posted 韶光不负
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringIOC的bean自动注解(Resource,Autowired)相关的知识,希望对你有一定的参考价值。
目录
出现的问题(org.xml.sax.SAXParseException; lineNumber: 11; columnNumber: 36; schema_reference.4)
注解方式注入 Bean
对于bean的注入,除了使用xml配置以外,可以使用注解配置。注解的配置,可以简化配置文件,提高开发的速度,使程序看上去更简洁。对于注解的解释,Spring对于注解有专门的解释器,对定义的注解进行解析,实现对应bean对象的注入。通过反射技术实现。
@Resource注解
@Resource注解实现自动注入(反射机制)
- 默认根据属性字段名称查找对应的 bean对象(属性字段的名称与bean标签的id属性值相等)·如果属性字段名称未找到,则会通过类型(Class类型)查找
- 属性可以提供set方法,也可以不提供set方法
- 注解可以声明在属性级别或set方法级别
- 可以设置name属性,name属性值必须与bean标签的id属性值一致;如果设置了name属性值,就只会按照name属性值查找bean对象
- 当注入接口时,如果接口只有一个实现则正常实例化;如果接口存在多个实现,则需要使用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对象的自动注入
- 默认根据类型(CLass)查找,与属性字段名无关
- 属性字段可以提供set方法也可以不提供
- 注解可以声明在属性字段级别或set方法级别
- 如果需要役置属性字段通过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)的主要内容,如果未能解决你的问题,请参考以下文章