Spring通过注解进行bean管理

注解是代码中特殊的标记,使用注解可以完成特定的功能。注解可以使用在类、方法或属性上,写法如:@注解名称(属性名称=属性值)

注:官方推荐使用注解

使用步骤

一、准备工作

1、导入jar包

  • 导入基本的jar包:commons-logginglog4jspring-beansspring-contextspring-corespring-expression相关jar包。
  • 导入AOP的jar包:spring-aopjar包。

2、创建类、方法

//例如User.java
package com.myw;

import org.springframework.stereotype.Component;

public class User {
    public void add() {
        System.out.println("User Add Method.");
    }
}

3、创建Spring配置文件,引入约束;并开启注解扫描

<!--applicationContext.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">

    <!--
        开启注解扫描
            (1)到包中扫描类、方法、属性上是否有注解
     -->
    <context:component-scan base-package="com.myw"></context:component-scan>

    <!--
            (2)只扫描属性上的注解
    -->
    <!--<context:annotation-config></context:annotation-config>-->
</beans>

二、注解创建对象

在创建对象的类上面使用注解实现,如:

@Component(value="user")
public class User {
    ...
}

注: value一般可以省略,直接写成@Component(“user”)

创建测试类 TestAnno.java和测试方法,如:

package com.myw;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestAnno {

    @Test
    public void runUser() {
        ApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
        User user = (User) context.getBean("user");
        user.add();
    }
}

除了上述提到的 @Component注解外,Spring中还提供了@Component的3个衍生注解,其功能就目前来说是一致的,均是为了创建对象。

  • @Controller :WEB层
  • @Service :业务层
  • @Repository :持久层(不常用,一般使用@Component)

以单例或多实例方式创建对象,默认为单例,多例对象设置注解如下:

@Component(value="user")
@Scope(value="prototype")
public class User {
    ...
}

三、注解注入属性

案例:创建Service类和Dao类,并在Service中注入Dao对象。如下:
(1)创建Dao和Service对象

//UserDao.java
package com.myw;

import org.springframework.stereotype.Repository;

@Repository(value="userDao")
public class UserDao {
    public void add() {
        System.out.println("UserDao Add Method.");
    }
}

//UserService.java
package com.myw;

import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service(value="userService")
public class UserService {
    public void add() {
        System.out.println("UserService Add Method.");
        userDao.add();
    }
}

(2)在Service类中定义UserDao类型的属性,并使用注解完成对象的注入
@Autowired:自动注入或自动装配,是根据类名去找到类对应的对象来完成注入的。

@Autowired
private UserDao userDao;

或者 @Resource

@Resource(name="userDao")
private UserDao userDao;

注:

  1. 其中该注解的name属性值为注解创建Dao对象的value属性的值。这两种注解方式都不一定要为需要注入的属性定义set方法
  2. @Autowired注解默认是按类型进行装配的,如果我们想使用名称装配可以结合@Qualifier注解进行使用。而@Resource,默认按照名称进行装配,如果名称找不到,则使用类型装配

总结:

配置文件和注解混合使用
1)创建对象的操作一般使用配置文件方式实现;
2)注入属性的操作一般使用注解方式实现。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章