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

目录

1.Bean基本注解开发

@Component

@Score@lazy

@PostConstruct和@PreDestroy

@Repository@Service@Controller

2.Bean依赖注入注解开发

@Value

@Autowired

@Qualifier

@Resource

扩展AutoWired


1.Bean基本注解开发

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

@Component

使用注解替代 标签

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

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

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




 

    

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

@Score@lazy

Bean基本注解开发和Bean依赖注入注解开发_第1张图片

@PostConstruct和@PreDestroy


需要引入依赖

    javax.annotation
    javax.annotation-api
    1.3.2
  @PostConstruct
    public void init(){
        System.out.println("init User");
    }


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

@Repository@Service@Controller

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

Bean基本注解开发和Bean依赖注入注解开发_第2张图片

2.Bean依赖注入注解开发

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


        
        
    

Bean基本注解开发和Bean依赖注入注解开发_第3张图片

@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 users){

    }

你可能感兴趣的:(Spring,java,spring)