spring注解实现设值注入

spring注解实现设值注入

写在前面

很久以前在有道云笔记上写的笔记,打算放弃它了,将笔记迁移到这里来。文章可能还有很多不足,请大家谅解,欢迎大佬提意见。

本文使用到的东西

  1. ecplipse
  2. spring

1.正文

在配置文件中设置注解扫描路径
--这里spring配置头基于spring4.0的包, base-package注解表示注解的扫描路径

<?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" 
xmlns:aop="http://www.springframework.org/schema/aop" 
xmlns:tx="http://www.springframework.org/schema/tx" 
xsi:schemaLocation=" 
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd 
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd 
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd 
">
<context:component-scan base-package="com.etc" />
</beans>

在java类中取得定义的对象
--实现方式与xml文件配置的方式相同

//1 读取applicationContext.xml文件,创建1个对象工厂
      BeanFactory fac = new ClassPathXmlApplicationContext("applicationContext.xml"); 

      //2 使用class类来拿出对象
      //IFly p1_2 = fac.getBean(Plane.class);

      //2 通过id从工厂中拿出对象,指定为IFly.class类型
      IFly p1 = fac.getBean("plane",IFly.class);

      //3 取得的对象可以正常使用
      p1.fly();

创建Bean的注解

@Component	--通用的注解,用于注解一些中立的对象
@Controller    --控制层
@Service	--业务层(按业务划分)
@Repository ---dao层(数据库操作层,按数据表划分)

**不指定ID示例: **

@Component

**指定ID示例: **

@Component(value="book") 
或
@Component("book")

@Value给属性赋值
示例:

    @Value("1213")
    private int sid;

@Scope对象生命周期
示例:

@Scope("prototype")

表示bean的生命周期:

  • singleton-默认值,单例(对象只创建一次)。
  • prototype-原型,即用到时new(单例只能懒创建)。
  • request--和request生命周期相同。
  • session-和ssesion生命周期相同。

@Autowired默认按byType自动注入

  1. @Autowired可以写在属性或setter方法上,写在属性就直接赋值,写在setter方法上则通过setter方法赋值。
  2. @Autowired默认按类型装配,默认情况下必须要求依赖对象必须存在如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false)
  3. 如果我们想使用属性名称装配可以结合@Qualifier注解进行使用

@Resource默认按 byName自动注入

  1. @Resource这个注解属于J2EE,可以写在属性或setter方法上,写在属性就直接赋值,写在setter方法上则通过setter方法赋值。
  2. name属性:解析为bean中属性的名字 type属性:解析为bean中属性的类型
  3. 使用name属性,则使用byName的自动注入策略,从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
  4. 使用type属性时则使用byType自动注入策略,从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
  5. 如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;
  6. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常

@Qualifier指名对应类的对象

  1. @Qualifier的意思是合格者,通过这个标示,表明了哪个实现类才是我们所需要的,
  2. 添加@Qualifier注解,需要注意的是@Qualifier的参数名称为我们之前定义的bean注解的名称之一,也就是bean的id。
  3. @Qualifier指定的bean类

2.总结

很久以前在有道云笔记上写的笔记,打算放弃它了,将笔记迁移到这里来。有不清楚的地方欢迎评论留言,看到的我都会回复的。本文到此结束,有什么不足的地方请大家不吝指正。

---------本文结束感谢您的阅读---------

评论

 热烈欢迎各位大佬专家莅临玖涯博客指导检查!

 交换友链的朋友请前往友情链接

 热烈欢迎各位大佬专家莅临玖涯博客指导检查!

 交换友链的朋友请前往友情链接

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×