zoukankan      html  css  js  c++  java
  • 13Spring通过注解配置Bean(1)

    配置Bean的形式:基于XML文件的方式;基于注解的方式(基于注解配置Bean;基于注解来装配Bean的属性)

    下面介绍基于注解的方式来配置Bean。

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

    ——特定组件包括:

      1.@Component:基本注解,标识了一个受Spring管理的组件

      2.@Respository:标识持久层组件

      3.@Service:标识服务层(业务层)组件

      4.@Controller:标识表现层组件

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

    当在组件类上使用了特定的注解之后,还需要在Spring的配置文件中声明<context:component-scan>(需要导入context命名空间):

    ——base-package属性指定一个需要扫描的基类包,Spring容器将会扫描这个基类包里及其子包中的所有类。

    ——当需要扫描多个包时,可以使用逗号分隔

    ——如果仅希望扫描特定的类而非基包下的所有类,可适用resource-pattern属性过滤特定的类,实例:

      <context:component-scan base-package=“com.spring.beans” resource-pattern="autowire/*.class"/>

    ——<context:include-filter>子节点表示要包含的目标类

    ——<context:exclude-filter>子节点表示要排除在外的目标类

    ——<context:component-scan>下可以拥有若干个<context:include-filter><context:exclude-filter>子节点

    package annotation;
    
    import org.springframework.stereotype.Component;
    
    @Component
    public class TestObject {
    
    }
    package annotation.repository;
    
    public interface UserRepository {
        void save();
    }
    package annotation.repository;
    
    import org.springframework.stereotype.Repository;
    
    @Repository(value = "userRepository")
    public class UserRepositoryImpl implements UserRepository {
        @Override
        public void save() {
            System.out.println("UserRepositoryImpl save");
        }
    }
    package annotation.controller;
    
    import org.springframework.stereotype.Controller;
    
    @Controller
    public class UserController {
        public void execute() {
            System.out.println("UserController execute");
        }
    }
    package annotation.service;
    
    import org.springframework.stereotype.Service;
    
    @Service
    public class UserService {
        public void add() {
            System.out.println("UserService add");
        }
    }
    <?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">
        <!--指定Spring IOC容器扫描的包-->
        <!--<context:component-scan base-package="annotation">
        </context:component-scan>-->
    
        <!--可以通过resource-pattern指定扫描的资源-->
        <!--<context:component-scan base-package="annotation"
                                resource-pattern="repository/*.class">
        </context:component-scan>-->
        <!--context:exclude-filter 子节点指定排除哪些指定表达式的组件-->
        <!--context:include-filter 子节点指定包含指定表达式的组件,该子节点需要use-default-filters 配个使用-->
        <context:component-scan base-package="annotation">
            <!--annotation表示根据指定注解来包含还是不包含-->
            <!--<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"></context:exclude-filter>-->
            <!--<context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"></context:include-filter>-->
            <!--assignable根据指定类名来包含还是不包含-->
           <!-- <context:exclude-filter type="assignable" expression="annotation.repository.UserRepository"></context:exclude-filter>-->
            <!--<context:include-filter type="assignable" expression="annotation.repository.UserRepository"></context:include-filter>-->
        </context:component-scan>
    </beans>
    package annotation;
    import annotation.controller.UserController;
    import annotation.repository.UserRepository;
    import annotation.service.UserService;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class Main {
        public static void main(String[] args) {
            ApplicationContext ctx = new ClassPathXmlApplicationContext("13-1.xml");
            TestObject to = (TestObject) ctx.getBean("testObject");
            System.out.println(to);
    
            UserController userController = (UserController) ctx.getBean("userController");
            System.out.println(userController);
    
            UserService userService = (UserService) ctx.getBean("userService");
            System.out.println(userService);
    
            UserRepository userRepository = (UserRepository) ctx.getBean("userRepository");
            System.out.println(userRepository);
        }
    }
  • 相关阅读:
    Poj 3177 Redundant Paths (双连通分支+节点统计)
    Uva 796 Critical Links (割边+排序)
    Lightoj 1020
    Flip Game---poj1753(状压+bfs)
    Best Cow Line---poj3617(贪心)
    滑雪---poj1088(动态规划+记忆化搜索)
    King's Quest---poj1904(连通图缩点)
    Steady Cow Assignment---poj3189(多重匹配+二分)
    B. Berland National Library---cf567B(set|模拟)
    HDU Today---hdu2112(最短路-_-坑在是无向图)
  • 原文地址:https://www.cnblogs.com/jecyhw/p/4588245.html
Copyright © 2011-2022 走看看