Spring入门第十四课

基于注解的方式配置bean(基于注解配置Bean,基于注解来装配Bean的属性)

在classpath中扫描组件

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

特定组件包括:

[email protected]:基本注解,表示了一个受Spring管理的组件

[email protected]:标识持久层组件

[email protected]:标识服务层组(业务层)件

[email protected]:标识表现层组件

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

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

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

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

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

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

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

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

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

看代码

package logan.spring.study.annotation;

import org.springframework.stereotype.Component;

@Component
public class TestObject {

}
package logan.spring.study.annotation.repository;

import org.springframework.stereotype.Repository;

@Repository("userRepository")
public class UserRepositoryImpl implements UserRepository {

    @Override
    public void save() {
        // TODO Auto-generated method stub
        System.out.println("UserRepository Save...");

    }

}
package logan.spring.study.annotation.service;

import org.springframework.stereotype.Service;

@Service
public class UserService {

    public void add(){
        System.out.println("UserService add...");
    }
}
package logan.spring.study.annotation.controller;

import org.springframework.stereotype.Controller;

@Controller
public class UserController {

    public void execute(){
        System.out.println("UserController execute...");
    }

}

配置文件

<?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.3.xsd">

    <context:component-scan base-package="logan.spring.study.annotation"></context:component-scan>

</beans>
package logan.spring.study.annotation;

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

import logan.spring.study.annotation.controller.UserController;
import logan.spring.study.annotation.repository.UserRepository;
import logan.spring.study.annotation.service.UserService;

public class Main {
    public static void main(String[] args) {
        System.out.println(1);
        ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-annotation.xml");
        System.out.println(2);
        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);
    }

}
package logan.spring.study.annotation.repository;

public interface UserRepository {

    void save();

}

返回的结果为

五月 24, 2017 10:25:12 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org[email protected]42110406: startup date [Wed May 24 22:25:11 CST 2017]; root of context hierarchy
五月 24, 2017 10:25:12 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [beans-annotation.xml]
[email protected]
[email protected]
[email protected]
[email protected]68d

这里使用的jar包有:

可以如下改规则:(通过resource-pattern指定扫描资源)

<?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.3.xsd">

    <context:component-scan
    base-package="logan.spring.study.annotation"
    resource-pattern="repository/*.class" ></context:component-scan>

</beans>
package logan.spring.study.annotation;

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

import logan.spring.study.annotation.controller.UserController;
import logan.spring.study.annotation.repository.UserRepository;
import logan.spring.study.annotation.service.UserService;

public class Main {
    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-annotation.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);
    }

}

输出的结果为:

五月 24, 2017 10:30:25 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org[email protected]42110406: startup date [Wed May 24 22:30:25 CST 2017]; root of context hierarchy
五月 24, 2017 10:30:25 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [beans-annotation.xml]
[email protected]bfca

<context:include-filter>和<context:exclude-filter>子节点支持多种类型的过滤表达式:

类别 示例 说明
annotation    
assinable    
aspecct    
regex    
custom    
时间: 2024-10-24 02:59:10

Spring入门第十四课的相关文章

Spring入门第十九课

后置通知 看代码: package logan.study.aop.impl; public interface ArithmeticCalculator { int add(int i, int j); int sub(int i, int j); int mul(int i, int j); int div(int i, int j); } package logan.study.aop.impl; import org.springframework.stereotype.Componen

Spring入门第十八课

Spring AOP AspectJ:Java社区里最完整最流行的AOP框架 在Spring2.0以上的版本中,可以使用基于AspectJ注解或者基于XML配置的AOP 看代码: package logan.study.aop.impl; public interface ArithmeticCalculator { int add(int i, int j); int sub(int i, int j); int mul(int i, int j); int div(int i, int j)

Spring入门第十六课

接上一次讲课 先看代码: package logan.spring.study.annotation.repository; public interface UserRepository { void save(); } package logan.spring.study.annotation.repository; import org.springframework.stereotype.Repository; @Repository("userRepository") pub

Spring入门第十二课

Bean的配置方法 通过工厂方法(静态工厂方法&实例工厂方法),FactoryBean 通过调用静态工厂方法创建Bean 调用静态工厂方法创建Bean是将对象创建的过程封装到静态方法中,当客户端需要对象时,只需要简单的调用静态方法,而不用关心创建对象的细节. 要声明通过静态方法创建的Bean,需要在Bean的class属性里指定拥有该工厂的方法类,同时在factory-method属性里指定工厂方法的名称,最后,使用<constructor-arg>元素为该方法传递方法参数. 看代码

Spring入门第十课

Spring表达式语言:SpEL Spring表达式语言(简称SpEL)是一个支持运行时查询和操作对象图的强大的表达式语言. 语法类似于EL:SpEL使用#{...}作为定界符,所有在大括号中的字符都将被认为是SpEL SpEL为bean的属性进行动态复制提供了便利. 通过SpEL可以实现: -通过bean的id对bean进行引用 -调用方法以及引用对象中的属性 -计算表达式的值 -正则表达式的匹配 下面看如何使用 package logan.spring.study.spel; public

Spring入门第二十四课

Spring对JDBC的支持 直接看代码: db.properties jdbc.user=root jdbc.password=logan123 jdbc.driverClass=com.mysql.jdbc.Driver jdbc.jdbcUrl=jdbc:mysql://localhost:3306/selective-courses-system jdbc.initPoolSize=5 jdbc.maxPoolSize=10 applicationContext.xml <?xml ve

大数据入门第十四天——Hbase详解(一)入门与安装配置

一.概述 1.什么是Hbase 根据官网:https://hbase.apache.org/ Apache HBase™ is the Hadoop database, a distributed, scalable, big data store. HBASE是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统 中文简明介绍: Hbase是分布式.面向列的开源数据库(其实准确的说是面向列族).HDFS为Hbase提供可靠的底层数据存储服务,MapReduce为Hbase提供高性能的计算能力,

NeHe OpenGL教程 第十四课:图形字体

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第十四课:图形字体 图形字体: 在一课我们将教你绘制3D的图形字体,它们可像一般的3D模型一样被变换. 这节课继续上一节课课的内容.在第13课我们学习了如何使用位图字体,这节课,我们将学习如何使用轮廓字体. 创建轮廓字体的方法类似于

NeHe OpenGL教程 第四十四课:3D光晕

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第四十四课:3D光晕 3D 光晕 当镜头对准太阳的时候就会出现这种效果,模拟它非常的简单,一点数学和纹理贴图就够了.好好看看吧. 大家好,欢迎来到新的一课,在这一课中我们将扩展glCamera类,来实现镜头光晕的效果.在日常生活中,