[4]Spring以注解的方式进行Bean的实例化和属性注入

来源:互联网 发布:linux 查看所有rpm 编辑:程序博客网 时间:2024/05/22 12:37

在进行Spring开发时所需要的基础jar包有:

这里写图片描述

当需要在Spring中使用注解的时候,还需要导入

这里写图片描述

在配置文件中引入新的约束:

  <?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:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="          http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd          http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- bean definitions here -->  </beans>

在配置文件中进行配置:

在需要使用注解进行的时候,需要在配置文件中进行 开启注解扫描的配置

    <!--开启注解的扫描 扫描com.merpyzf下所有的包-->    <context:component-scan base-package="com.merpyzf" ></context:component-scan>    <!--只会扫描属性上的注解-->    <context:annotation-config></context:annotation-config>

使用注解的方式来创建对象:

Computer.java(需要被创建的类)

/** * Created by wangke on 17-6-23. */@Component(value = "computer") //相当于在配置文件中 <bean id="computer" class="……"></bean>@Scope(value = "prototype") //配置创建对象是否是以单列模式进行创建public class Computer {    public void printBrand(){        System.out.println("小米笔记本");    }}

在需要实例化的类的类名上面加上@Component 注解来进行标识,value的值就相当于在配置文件中进行配置时bean标签的id属性的值,用于对象的创建。

创建对象的四个注解:

@Component@Controller  //web层中使用@Service   //业务层@Repository //持久层

这四个注解目前的功能都是一样的,注解名的不同为了能够让标记类本身的用途更加清晰,Spring在后续的版本中会对其加强。

创建对象的测试代码:

@Testpublic void Test(){    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext02.xml");    Computer computer = (Computer) context.getBean("computer");    computer.printBrand();}

运行结果:

这里写图片描述

使用注解注入对象属性

在开发中我们经常会遇到在一个类中持有另外一个类的引用,在前面的博客中记录了使用配置文件中注入对象属性的方式,下面我们接着来看一下使用注解进行注入的方式:

下面的例子,在UserService中持有UserDao这个对象的引用

UserDao.java

/** * Created by 春水碧于天 on 2017/6/23. */@Component(value = "userDao")public class UserDao {    public void printInfo(){        System.out.println("UserDao中的实例化对象里的方法执行了");    }}

两种对象属性注入的注解:

1.使用 @Autowired 注解进行自动装配,不需要指定要注入的对象的value值,自动的根据类名去寻找对应的类来创建对象并进行对象属性的注入。
2. 使用 @Resource(name=”userDao”),需要指定需要创建的对象的名字,这里的name对应@Component注解中的value的值,使用这个注解能够根据我们所指定的对象名准确创建出我们所需要的对象。

UserService.java(示例中使用@Resource注解进行对象属性的注入)

/** * Created by 春水碧于天 on 2017/6/23. */@Service(value = "userService")public class UserService {    private List list;    //@Autowired //自动装配,根据类名称去找相应的类来创建对象    @Resource(name="userDao")  //name属性值写使用注解创建对象时的value中的值    private UserDao userDao;    public void print(){        userDao.printInfo();    }}

MyTest.java 测试代码:

@Testpublic void Test(){    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");    UserService service = (UserService) context.getBean("userService");    service.print();}

运行结果:

这里写图片描述

配置文件和注解混合使用

1.创建对象的操作使用配置文件的方式实现

2.注入属性的操作使用注解的方式实现

下面看一下混合使用的例子:

在StudentService中持有BookDao,ComputerDao对象的引用,调用StudentService实例化对象中的printDo()方法测试对象是否创建成功。

BookDao.java

/** * Created by 春水碧于天 on 2017/6/23. */public class BookDao {    public void doSomething(){        System.out.println("读书");    }}

ComputerDao.java

/** * Created by 春水碧于天 on 2017/6/23. */public class ComputerDao {    public void doSomething(){        System.out.println("敲代码……");    }}

StudentService.java

/** * Created by 春水碧于天 on 2017/6/23. */public class StudentService {    @Resource(name = "bookDao")    private BookDao bookDao;    @Resource(name = "computerDao")    private ComputerDao computerDao;    public void printDo(){        bookDao.doSomething();        computerDao.doSomething();    }}

applicationContext.xml(Spring 配置文件)

<!--开启注解扫描--><context:component-scan base-package="com.merpyzf"></context:component-scan><!--进行对象的创建--><bean id="studentService" class="com.merpyzf.study.StudentService"></bean><bean id="bookDao" class="com.merpyzf.study.BookDao"></bean><bean id="computerDao" class="com.merpyzf.study.ComputerDao"></bean>

MyTest.java(测试代码)

@Testpublic void Test(){    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");    StudentService service = (StudentService) context.getBean("studentService");    service.printDo();}

运行结果:

这里写图片描述