Spring注解的方式管理bean

Spring 针对bean管理中创建对象提供注解

1,@Component:不指定 value 属性,bean 的 id 是类名的首字母小写

2,@Service:用于对 Service 实现类进行注解

3,@Controller:用于对 Controller 实现类进行注解

4,@Repository:用于对 DAO 实现类进行注解

1,为了能够使用注解的方式创建对象,需要引入依赖,如果是导包则需要aop.jar,如果maven则导入依赖

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.2.5.RELEASE</version>
</dependency>

2,开启组件扫描

	<!--开启组件扫面-->
    <!--<context:component-scan base-package="com.lishizhan.service,com.lishizhan.dao,com.lishizhan.domain"/>-->
    <context:component-scan base-package="com.lishizhan"/>

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

//value:可以不写,默认类名称首字母小写
//@Component(value = "userService") //<bean id="userService" class="">
@Service(value = "userService")
// @Controller(value = "userService")
// @Repository(value = "userService")
public class UserService {
    public void test(){
        System.out.println("使用注解的方式创建对象");
    }
}

4,对扫描器进行设置,扫描和不扫描

<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <!--开启组件扫面-->
    <!--<context:component-scan base-package="com.lishizhan.service,com.lishizhan.dao,com.lishizhan.domain"/>-->
    <context:component-scan base-package="com.lishizhan"/>

    <!--示例一,不全部扫描
        use-default-filters:开启指定扫描
        context:include-filter:设置扫描的内容
    -->
    <context:component-scan base-package="com.lishizhan" use-default-filters="false">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

    <!--实例二,排除指定的类
        context:exclude-filter:设置哪些类不扫描
     -->
    <context:component-scan base-package="com.lishizhan">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

</beans>

5,注解方式实现属性注入

1,@Autowired:根据属性类型自动注入

2,@Qualifiter:根据属性名称进行注入

3,@Resource:可以根据类型或者根据名称注入

4,@Value:注入普通类型属性

以@Autowired为例:

(1)将service和dao对象创建,在类上添加注解:@Service @Repository

(2)在Service中注入Dao对象,在service中添加dao属性,在属性上使用注解@Autowired

@Service
public class UserService {

    //调用dao中的方法之前注入UserDao
    @Autowired
    private UserDao userDao;

    /*@Autowired
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }*/

    public void test(){
        System.out.println("使用注解的方式创建对象");
        userDao.add();
    }
}

以@Qualifiter:根据名称进行注入,注意要和@Autowired一起使用

@Service
public class UserService {

    //调用dao中的方法之前注入UserDao
    @Autowired
    @Qualifier(value = "userDaoImpl1") //根据名称进行注入
    private UserDao userDao;

    /*@Autowired
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }*/

    public void test(){
        System.out.println("使用注解的方式创建对象");
        userDao.add();
    }
}

以@Resource:可以根据类型或者根据名称注入 他是JDK中的不是spring的

@Service
public class UserService {

    //调用dao中的方法之前注入UserDao
    // @Autowired
    // @Qualifier(value = "userDaoImpl1") //根据名称进行注入
    // private UserDao userDao;

    // @Resource //根据类型注入
    @Resource(name = "userDaoImpl1") //根据名称注入
    private UserDao userDao;


    /*@Autowired
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }*/

    public void test(){
        System.out.println("使用注解的方式创建对象");
        userDao.add();
    }
}

以@Value:注入普通类型属性

@Service
public class UserService {
    
    @Value(value = "黎仕展")
    private String name;
    
}

6,纯注解开发(了解)

(1)创建配置类代替配置文件

//配置类
@Configuration
@ComponentScan(basePackages = "com.lishizhan")
public class SpringConfg {

}

(2)测试

public class SpringConfgTest {
    @Test
    public  void test(){
        //加载配置类
        ApplicationContext context =
                new AnnotationConfigApplicationContext(SpringConfg.class);
        UserService userService = context.getBean("userService", UserService.class);
        userService.test();

    }

}
上一篇:03_IOC本质推导


下一篇:hashcode()和equals()