Spring 通过注解配置 Bean(1)

来源:互联网 发布:overlay网络是什么 编辑:程序博客网 时间:2024/05/20 10:22

Bean 通过加上注解的方式将 Bean 放入 IOC 容器。

【一】组件扫描(component scanning): Spring 能够从 classpath 下自动扫描, 侦测和实例化具有特定注解的组件.

特定组件包括:

  ->@Component: 基本注解, 标识了一个受 Spring 管理的组件  ->@Respository: 标识持久层组件  ->@Service: 标识服务层(业务层)组件  ->@Controller: 标识表现层组件

Spring 无法识别四种注解区别,所以可以混用。

对于扫描到的组件, Spring 有默认的命名策略: 使用非限定类名, 第一个字母小写. 也可以在注解中通过 value 属性值标识组件的名称

【二】Bean 加入注解后,还需在 Spring 配置文件中声明<context:component-scan>

--> base-package 属性指定一个需要扫描的基类包,Spring 容器将会扫描这个基类包里及其子包中的所有类. --> 当需要扫描多个包时, 可以使用逗号分隔.--> 如果仅希望扫描特定的类而非基包下的所有类,可使用 resource-pattern 属性过滤特定的类,示例`<context:component-scan base-package="com.spring.beans" resource-pattern="autowire/*.class"></context:component-scan>`--> <context:include-filter> 子节点表示要包含的目标类--> <context:exclude-filter> 子节点表示要排除在外的目标类--> <context:component-scan> 下可以拥有若干个 <context:include-filter> 和 <context:exclude-filter> 子节点

示例:

Bean:@Componentpublic class TestObject {}@Servicepublic class UserService {    public void add() {        System.out.println("UserService add() ");    }}public interface UserRepository {    void save();}@Repositorypublic class UserRepositoryImpl implements UserRepository {    @Override    public void save() {        System.out.println("UserRepositoryImpl save()");    }}@Controllerpublic class UserConntroller {    public void execute(){        System.out.println("UserConntroller execute");    }}Spring-config.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-4.0.xsd">    <!-- 指定 Spring IOC 容器扫描的包 -->    <context:component-scan base-package="com.spring.annocation"></context:component-scan></beans>

文件路径:这里写图片描述

测试类:

public class Test {    public static void main(String[] args) {        ApplicationContext ctx = new ClassPathXmlApplicationContext("spring-config.xml");        UserService userService = ctx.getBean(UserService.class);        System.out.println(userService);        UserConntroller userConntroller = ctx.getBean(UserConntroller.class);        System.out.println(userConntroller);        UserRepository userRepository = ctx.getBean(UserRepositoryImpl.class);        System.out.println(userRepository);        TestObject testObject = ctx.getBean(TestObject.class);        System.out.println(testObject);    }}输出:2017-12-23 20:04:45 org.springframework.context.support.AbstractApplicationContext prepareRefresh信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@53ef9f1d: startup date [Sat Dec 23 20:04:45 CST 2017]; root of context hierarchy2017-12-23 20:04:45 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions信息: Loading XML bean definitions from class path resource [spring-config.xml]com.spring.annocation.Service.UserService@7e9ffe3fcom.spring.annocation.conntroller.UserConntroller@39ed1b0bcom.spring.annocation.repository.UserRepositoryImpl@7d8a8ce2com.spring.annocation.TestObject@132789d2
原创粉丝点击