Spring - 详解注解方式的配置(09)

@Component的衍生注解

@Component可以标注一个类成为Spring的bean,可适用于所有的类,但是无法区分Java EE开发中三层架构的层次,所以Spring提供了三个衍生注解来区分三层架构,但是并没有实际的意义,仅仅是语义上的区分,不过再开发中推荐使用衍生注解,因为在未来的版本中可能会增加新的特性。

  • @Controller:Web层
  • @Service:业务层
  • @Reposotory:Dao层

注入基本数据类型

使用@Value注解。

<context:component-scan base-package="com/spring/secondday" ></context:component-scan>
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/*
 * @Component("userDao") 等价于 <bean id="userDao" class="com.spring.secondday.UserDaoImpl"></bean>
 */
@Component("userDao")
public class UserDaoImpl implements UserDao {

    /*      @Value设置值时不需要有setters方法。         */
    @Value("HelloWorld")
    private String name;
    public void save() {    }
    public String toString() {
        return "UserDaoImpl [name=" + name + "]";
    }
}
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {
    public static void main(String[] args) {
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserDao ud = (UserDao)ac.getBean("userDao");
        System.out.println(ud);
        /*Console:
         *      UserDaoImpl [name=HelloWorld]        */
    }
}

注入引用数据类型

  • @Autowired:使用xml的时候是按id注入,但这个注解是按类型注入。也就是说如下代码@Autowired \n private UserDao ud;会自动寻找UserDao的实现类来注入,如果能找到多个则会出错。
  • @Qualifier:这个注解让@Autowired强行使用按id注入的规则,如:@Autowired \n @Qualifier(value="userDaoMybatis") \n private UserDao ud;
  • @Resource:把@Autowired@Qualifier结合起来。如:@Resource(name="userDao") \n private UserDao ud;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/*
 * @Component("userDao") 等价于 <bean id="userDao" class="com.spring.secondday.UserDaoImpl"></bean>
 */
@Component("userDao")
public class UserDaoImpl implements UserDao {

    /*      @Value设置值时不需要有setters方法。         */
    @Value("HelloWorld")
    private String name;
    public void save() {    }
    public String toString() {
        return "UserDaoImpl [name=" + name + "]";
    }
}
import javax.annotation.Resource;

import org.springframework.stereotype.Component;

@Component("userService")
public class UserServiceImpl implements UserService{
    @Resource(name="userDao")
    private UserDao ud;
    public void save() {    }
    public String toString() {
        return "UserServiceImpl [ud=" + ud + "]";
    }
}
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {
    public static void main(String[] args) {
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService us = (UserService)ac.getBean("userService");
        System.out.println(us);
        /*Console:
         *      UserServiceImpl [ud=UserDaoImpl [name=HelloWorld]]       */
    }
}

配置bean的生命周期

  • @PostConstruct:配置初始化时执行的方法
  • PreDestroy:配置工厂关闭时执行的方法
@PostConstruct
public void init(){
    System.out.println("init");
}
@PreDestroy
public void destory() {
    System.out.println("destory");
}

配置bean的作用域

@Scope(value="")配置bean的作用范围,属性值和xml方式一致。

  • singleton :默认的,Spring会采用单例模式创建这个对象。
  • prototype :多例模式。
  • request :应用在web项目中,Spring创建这个类以后,将这个类存入到request范围中。
  • session :应用在web项目中,Spring创建这个类以后,将这个类存入到session范围中。
  • globalsession :应用在web项目中,必须在porlet环境下使用。但是如果没有这种环境,相当于session。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值