9.IOC 操作 Bean 管理(基于注解方式@Autowried,@Nullable)

10、IOC 操作 Bean 管理(基于注解方式)

<!--开启组件扫描
    1 如果扫描多个包,多个包使用逗号隔开
    2 扫描包上层目录
-->
<context:component-scan base-package="com.leizi"></context:component-scan>

<!--开启注解支持-->
<context:annotation-config/>

@Autowired

直接在属性上使用即可,也可以在set方法上使用。

使用@Autowired可以不用编写Set方法,前提是这个自动装配的属性在IoC容器中存在,且符合名字byName自动装配。

@Nullable

字段标记了这个注解,说明这个字段可以为null

扩展:

@Autowired(required=false) 如果显示定义了Autowired的required属性为false,说明这个对象可以为null,否则不允许为空

@Autowired(required=false)
private Cat cat;

如果@Autowired自动装配的环境比较复杂,自动装配无法通过一个注解@Autowired完成的时候,我们可以使用@Qualifier(value="xxx")去配置@Autowired的使用,指定一个唯一的bean对象注入

public Class Perple {
    @Autowired
    @Qualifier(value="cat1")
    private Cat cat;
}

@Resource注解(java提供的自动装配注解)

public Class People {
    @Resource(name="cat2")
    private Cat cat;
    
    @Resource
    private Dog dog;
}

小结:

@Resource 和 @Autowired 的区别:

都是用来自动装配的,都可以放在属性字段上

通常情况下@Autowired是通过byType的方法注入的(而且必须要求这个对象存在),可是在多个实现类的时候,byType的方式不再是唯一,而需要通过byName的方式来注入,
而这个name默认就是根据变量名来的。通过@Qualifier注解来指明使用哪一个实现类,实际上也是通过byName的方式实现。到底使用byType还是byName是有优先级的。优先用byType,而后是byName。

@Autowried是Spring2.5定义的自动装配的注解,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 使用 @Autowired的使用来消除 set ,get方法。
@Autowired 标注在方法上表示当前方法的自定义参数从容器中赋值,ioc容器默认赋值时,需要调用无参构造器后,再进行默认赋值,如果当前类只有一个有参的构造器,则@Autwried可以省略,并且该构造器的参数也默认从ioc容器中获取。

@Resource 默认通过byName 的方式实现,如果找不到名字,则通过byType实现,如果两个都找不到的情况下,就报错。

注解@Scope("singleton") 表明范围,例如单例

@component
@Scope("singleton")
public class User{

}

JavaConfig实现配置:

配置类取代了xml配置文件:

9.IOC 操作 Bean 管理(基于注解方式@Autowried,@Nullable)

package com.stt.config;

import com.stt.pojo.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

// 被spring容器托管,注册到容器中,内部也是一个@Component
@Configuration  // 代表这个一个配置类,相当于applicationContext.xml配置文件
@ComponentScan("com.stt.pojo")  // 扫描包
@Import(MyConfig2.class)  // 导入其他配置类
public class MyConfig {

    // 注册一个Bean,相当于xml配置文件中的bean标签
    // 这个方法的名字,就相当于bean标签中的id属性
    // 这个方法的返回值,就相当于bean标签中的class属性
    @Bean
    public User user(){
        return new User();  // 返回要注入的对象
    }
}

上一篇:MYSQL 自定义函数,查询节点所有父节点、查询节点所有子节点


下一篇:浏览器性能优化实战