本节将讲解基于注解方式操作Bean

什么是注解

  1. 注解是代码特殊标记,格式:@注解名称(属性名称=属性值, 属性名称=属性值..)
  2. 使用注解,注解作用在类上面,方法上面,属性上面
  3. 使用注解目的:简化 xml 配置

对象的创建

四个注解都可以用来创建Bean实例分别是

@Component
@Service
@Controller
@Repository

首先需要依赖

spring-aop的依赖包

开启组件扫描

在配置文件中添加context命名空间,并开启组件扫描

<!--开启注解扫描-->
<context:component-scan base-package="life.wangquanguo.spring5"></context:component-scan>

如果需要扫描多个包,每个包之间要用逗号隔开
如果需要设置扫描哪些东西,不需要扫描哪些

<!--注解扫描详细配置
        自定义扫描区域
        将use-default-filters属性设为false
    -->
<context:component-scan base-package="life.wangquanguo.spring5" use-default-filters="false">
	<!--只扫描Controller注解的类-->
	<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
	<!--不扫描Controller注解的类-->
	<context:exclude-filter  type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

创建类,在类上添加创建对象注解

@Service
public class UserService {
    public void add(){
        System.out.println("UserServiceAdd");
        userDao.add();
    }
}

在测试类中测试,能够正常注入

属性注入

Autowired

根据属性类型进行自动装配

@Service
public class UserService {
    @Autowired//自动根据类型注入
    private UserDao userDao;

    public void add(){
        System.out.println("UserServiceAdd");
        userDao.add();
    }
}

Qualifier

根据名称进行自动装配,需要和@Autowired一起使用

@Service
public class UserService {
    @Autowired//自动根据类型注入
    @Qualifier("userDaoImpl")//根据名称进行注入,需要配合Autowired注解使用
    private UserDao userDao;

    public void add(){
        System.out.println("UserServiceAdd");
        userDao.add();
    }
}

Resource

javax拓展包下的注入,可以根据类型注入,也可以根据名称注入

@Service
public class UserService {

    @Resource(name = "userDaoImpl")//javax自带的注入,
    //可以根据类型或名称注入,当name属性为空时就根据类型注入,当name属性不为空时就根据名称注入
    private UserDao userDao;
    public void add(){
        System.out.println("UserServiceAdd");
        userDao.add();
    }
}

@Value
注入普通数据类型

@Service
public class UserService {

    @Value(value = "1")
    private Integer num;

    public void add(){
        System.out.println("UserServiceAdd");
        userDao.add();
        System.out.println(num);
    }
}

完全注解开发

可以不使用配置文件

创建配置类

首先需要创建一个配置类,代替xml文件

@Configuration
@ComponentScan(basePackages = {"life.wangquanguo.spring5"})
public class SpringConf {
}

其中@Configuration就是使当前类为spring配置类,并需要开启组件扫描注解

测试类

   @Test
    public void test1(){
        ApplicationContext context = new AnnotationConfigApplicationContext(SpringConf.class);
        UserService userService = context.getBean("userService", UserService.class);
        userService.add();
    }

需要用AnnotationConfigApplicationContext的构造方法来创建Spring容器

Q.E.D.

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议