Spring之使用注解实例化Bean并注入属性

1.准备工作

(1)导入jar包

除了上篇文章使用到的基本jar包外,还得加入aop的jar包,所有jar包如下
所需jar包

(2)配置xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    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">
    <!-- 开启注解扫描,到包里面扫描类、属性、方法上是否有注解 -->
    <context:component-scan base-package="com.codeliu"/>
</beans>

2.注解实例化Bean

(1)实例化Bean有四个注解
- @Component
- @Service:业务层
- @Controller:WEB层
- @Repository:持久层

虽然分了层,但目前这四个注解的功能是一样的。

@Service(value = "user") //相当于bean标签中的id,四种方式功能一样
// @Component(value = "user")
// @Controller(value = "user")
// @Repository(value = "user")
@Scope(value = "singleton")
public class User {
    public void print() {
        System.out.println("user......");
    }
}
    @Test
    /**
     * 使用注解实例化User类
     */
    public void testUser() {
        // 读取配置文件
        @SuppressWarnings("resource")
        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
        User user = (User)context.getBean("user");
        user.print();
    }

3.注解为属性赋值

首先来个UserDao

@Component(value = "userDao")
public class UserDao {
    public void print() {
        System.out.println("userdao......");
    }
}

再来个service

@Service(value = "userService")
public class UserService {
    // 注入对象类型的属性,不用提供set方法
    // 1.使用自动装配
    // @Autowired  // 为byType类型,如果有多个相同类型的,得配合@Qualifier注解
    // private UserDao userDao;

    // 2.不使用自动装配
    @Resource(name = "userDao")
    private UserDao userDao;

    // 注入普通类型的属性
    @Value(value = "CodeTiger")
    private String name;

    public void print() {
        System.out.println("UserService......");
        userDao.print();
        System.out.println(name);
    }
}

为属性赋值,我们可以使用自动装配,也可以手动赋值。

    @Test
    /**
     * 使用注解注入属性
     */
    public void testUserService() {
        @SuppressWarnings("resource")
        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
        UserService service = (UserService)context.getBean("userService");
        service.print();
    }

4.注解和xml结合使用

当然我们也可以同时使用注解和xml,一般我们在xml中实例化Bean,使用注解为属性赋值。

这里就不贴代码了,原理都一样。

猜你喜欢

转载自blog.csdn.net/a_helloword/article/details/80487728