Bean基本注解开发和Bean依赖注入注解开发

目录

1.Bean基本注解开发

@Component

@Score@lazy

@PostConstruct和@PreDestroy

@Repository@Service@Controller

2.Bean依赖注入注解开发

@Value

@Autowired

@Qualifier

@Resource

扩展AutoWired


1.Bean基本注解开发

基本Bean注解,主要是使用注释的方式替代原有xml的<bean>标签及其标签属性的配置

<bean id=" " name="" class="" scope="" lazy-init="" 
init-method="" destroy-method="" abstract="" 
autowire="" factory-bean="" 
factory-method=""></bean>

@Component

使用注解替代<bean> 标签

//Component注解 必须写类上面 可以起别名(没有起别名默认类名小写)

被该注解标识的类,会在指定扫描范围内被spring加载并实例化

使用步骤1,更改配置文件的头添加注解 2.添加扫描

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       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
">

 <!--spring需要通过注解的方式将类放到spring容器中 需要配置一个标签 context 告诉spring容器去哪里扫描注解-->
<!-- 告诉spring容器将那个包下具有注解的类放置spring容器中-->
    <context:component-scan base-package="com.rocky"></context:component-scan>

</beans>
@Component("user")
public class User {
    private Integer id;
    private String uname;
    private String password;
}

@Score@lazy

@PostConstruct和@PreDestroy

<!-- https://mvnrepository.com/artifact/javax.annotation/javax.annotation-api -->
需要引入依赖
<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.3.2</version>
</dependency>
  @PostConstruct
    public void init(){
        System.out.println("init User");
    }


    @PreDestroy
    public void destroy(){
        System.out.println("destroy user");
    }

@Repository@Service@Controller

由于JavaEE开发是分层的,为了每层Bean标识的注解语义化更加明确,@Component又衍生出如下三个注解:

2.Bean依赖注入注解开发

Bean依赖注入的注解,主要是使用注解的方式替代XML的<property>标签完成属性的注入操作

<bean id="" class="">
        <property name="" value=""></property>
        <property name="" ref=""></property>
    </bean>

@Value

@Component
public class User {
    @Value(value = "zhangsan")
    private String name;
    @Value("20")
    private int age;


    @Value("李四")
    public void setName(String name) {
        this.name = name;
    }

 public User(@Value("隔壁老王") String name, @Value("33") int age) {
        this.name = name;
        this.age = age;
    }

@Value注解可以出现在属性上、setter方法上、以及构造方法的形参上

@Autowired

Autowired注解可以用来注入非简单类型。单独使用@Autowired注解,默认根据类型装配

@Autowired根据类型注入
//如果有多个实现了接口的对象,那么我们必须和bean的参数名称匹配
//传递的参数和bean名称(id一致)

 @Autowired // 在属性上注入
    private UserDao userDao;

   @Autowired
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

   @Autowired
    public UserService(UserDao userDao) {
        this.userDao = userDao;
    }

 public UserService(@Autowired UserDao userDao) {
        this.userDao = userDao;
    }

@Qualifier

@Autowired注解默认是byType进行注入的,也就是说根据类型注入的,如果以上程序中,UserDao接口还有另外一个实现类,会出现问题

/Qualifier 指的是将spring容器中的名字匹配到方法参数中,和方法参数的名称无关
//必须和autowired组合使用byName,根据名称进行装配了。

@Autowired注解和@Qualifier注解联合起来才可以根据名称进行装配,在@Qualifier注解中指定Bean名称。

@Autowired()
@Qualifier("mysqlDao") //类没有指定别名时 使用类名 首字母小写
    public void setUserDao( UserDao userDao) {
        this.userDao = userDao;
    }

@Resource

  • 相当于@Autowired 和 @Qualifier
  • @Resource注解默认根据名称装配byName,未指定name时,使用属性名作为name。通过name找不到的话会自动启动通过类型byType装配。
  • @Resource注解用在属性上、setter方法上。
  •  //不指定参数名称时,等同于autowired
       @Resource(name = "oracle")

扩展AutoWired

任何方法都可以根据AutoWired注入

   // Autowired还可以给普通方法传递参数
    @Autowired
    @Qualifier("bbb")
    public void hahha(UserDao userDao){

    }
    @Autowired
    public void xixixix(List<User> users){

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值