Spring学习笔记(三)-----IOC之Annotation

注解的配置

beans.xml增加4句配置。

<?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-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd">
    <context:annotation-config />
</beans>
  1. xmlns:context="http://www.springframework.org/schema/context"
  2. http://www.springframework.org/schema/context
  3. http://www.springframework.org/schema/context/spring-context-2.5.xsd
  4. <context:annotation-config />,注解的配置,后面用<context:component-scan base-package="com.shen" />代替!

@Autowired和@Qualifier

@Autowired

配置了该注解,IOC容器会自动帮你注入形参类型的bean实体(代替bean标签下的子标签property)。
属性required:声明是否需要注释的依赖关系。默认是true(需要),不需要则不帮你注入(没啥用),适用场景:不确定IOC容器中是否存在形参类型的bean,配置为false,IOC初始化时不会报错,因为不是必须注入的。

注解使用地点:可以加在容器、成员变量(不推荐,破坏封装)、set(任意)方法(推荐)。

@Qualifier

@Autowired是根据byType来找bean实体的。所以使用@Qualifier(byName)来确定某个相同类型的bean的id

beans.xml代码如下:

    <bean id="u" class="com.shen.dao.impl.UserDAOImpl">
    </bean>
    <bean id="u2" class="com.shen.dao.impl.UserDAOImpl">
    </bean>

JAVA代码如下:

  @Autowired
  public void setUserDAO(@Qualifier("u") UserDAO userDAO) {
    this.userDAO = userDAO;
  }

注:为了容错匹配,bean的id/name是默认的Qualifier的值。
若没有写bean的id/name值,则需要如下xml配置:

    <bean class="com.shen.dao.impl.UserDAOImpl">
       <qualifier value="u"></qualifier>
    </bean>

@Required

在容器初始化时,必须自动注入该方法参数的bean,若未找到需要的bean,则报错。

@Resource(推荐使用)

注解位置:同@Autowired
默认根据byName(默认bean id是set方法后面的字符,首字符小写),按name/id找不到,在按照byType,在beans.xml中查找bean。
代码如下:

  @Resource
  public void setUserDAO(UserDAO userDAO) {
    this.userDAO = userDAO;
  }

如果想直接用byName查找,则使用@Resource(name="XXX")

Auto-detecting components

自动扫描组件,配置文件里不需要bean标签了。直接在bean类中注解。

@Component(通用组件)

  1. 先配置beans.xml。在beans标签下增加子标签<context:component-scan base-package="com.shen" />,让容器自动扫描包“com.shen”下的所有JAVA文件。
    PS:所有的bean都可以使用@Component注册为组件。

  2. @Component声明该类为一个“组件”,当容器发现有该注解时,认定他是一个bean(Resource),默认的Key(名字)是他的类名首字母小写。

  3. 其他类可使用@Resource(name=”上面的Key(名字)”)来进行自动注入 。(当然也可以使用@Autowired(byType)和@Qualifier(byName))

UserDAOImpl.java

@Component("u")
public class UserDAOImpl implements UserDAO {
    ………………
}

UserService.java

  @Resource(name="u")
  public void setUserDAO(UserDAO userDAO) {
    this.userDAO = userDAO;
  }

其他组件

  • @Service用于标注业务层组件

  • @Controller用于标注控制层组件(如struts中的action)

  • @Repository用于标注数据访问组件,即DAO组件

  • @Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注

@Scope

@Scope(“XXX”)

同XML中的配置。
- singleton:不管取多少次bean对象,都是同一个。
- prototype:每次创建新的对象,可以拿到多个bean,不是同一个。这里写图片描述

@PreDestory@PostConstruct

实例对象销毁前执行和初始化之后执行,标记在方法上面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值