通过注解配置Bean
之前说的三种配置方式,都是使用XML配置,现在我们说说使用注解配置Bean。
这部分内容主要分为两个部分:使用注解配置Bean,使用注解配置Bean属性。
在classpath中扫描组件
组件扫描:Spring能够从ClassPath下自动扫描,侦测和实例化具有特定注释的组件
特定组件包括:
@Component
@Respository 持久层
@Service 业务层
@Controller 控制层
这四个标签可以混用,暂时没有什么区别,不过建议在不同层用不同的注释,方便阅读。
创建一个新的包com.figsprite.spring.beans_annotation,新的类com.figsprite.spring.beans_annotation.TestObject:
在TestObject.java里我们先放上注释,
现在Bean还没有被IOC容器管理,我们再来建一个子包com.figsprite.spring.beans_annotation.repository,写一个接口com.figsprite.spring.beans_annotation.repository.UserRepository和实现类com.figsprite.spring.beans_annotation.repository.UserRepositoryImpl,接下来写业务层和控制层,分别创建一个包,然后写上相应代码,并写上注释:
UserController.java:
package com.figsprite.spring.beans_annotation.controller; import org.springframework.stereotype.Controller; @Controller
public class UserController {
public void execute(){
System.out.println("Controller execute");
}
}
UserService.java:
package com.figsprite.spring.beans_annotation.service; import org.springframework.stereotype.Service; @Service
public class UserService {
public void add(){
System.out.println("Service Add");
}
}
UserRepository.java
package com.figsprite.spring.beans_annotation.repository; public interface UserRepository { void save();
}
UserRepositoryImpl.java
package com.figsprite.spring.beans_annotation.repository; import org.springframework.stereotype.Repository; @Repository("userRepository")
public class UserRepositoryImpl implements UserRepository{ @Override
public void save() {
System.out.println("SAVE");
}
}
做完这些,我们可以创建一个配置文件beans-annotation.xml,然后我们在这个配置文件里,通过<context:component-scan>标签扫描具有这些注释的类的包:
<context:component-scan base-package="com.figsprite.spring.beans_annotation"/>
接下来做一个测试,创建Main.java
在我们没有指明Bean对象的id时,在注释配置下,默认id为类名的驼峰命名。
如何命名呢?只要在我们刚刚写的标签里加个括号指定就行:
@Repository("userRepository")
Main.java:
- package com.figsprite.spring.beans_annotation;
- import com.figsprite.spring.beans_annotation.controller.UserController;
- import com.figsprite.spring.beans_annotation.repository.UserRepositoryImpl;
- import com.figsprite.spring.beans_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("beans-annotation.xml");
- TestObject to = (TestObject) ctx.getBean("testObject") ;
- System.out.println(to);
- UserController userController = (UserController) ctx.getBean("userController");
- System.out.println(userController);
- UserRepositoryImpl userRepository = (UserRepositoryImpl) ctx.getBean("userRepository");
- System.out.println(userRepository);
- UserService userService = (UserService) ctx.getBean("userService");
- System.out.println(userService);
- }
- }
接下来回到<context:compomenr-scan>标签,再来说说里面的其他属性resource-pattern
,这个属性可以过滤特定类,比如我只想扫描repository底下的类,
<context:component-scan
base-package="com.figsprite.spring.beans_annotation"
resource-pattern="repository/*.class"/>
这样在Main里面,我们只会得到UserRepository的对象,其他的就得不到了,肯定报错,
<context:compomenr-scan>标签还有两个子标签
<context:include-filtter>包含哪些指定表达式的组件
< context:exclude-filtter >排除哪些指定表达式的组件
type属性:这里就介绍两种常用的annotation根据注解锁定目标,
比如不包含Repository注解
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
对于<context:include-filtter>,由于<context:compomenr-scan>默认是扫描包下的所有指定表达式组件,所有我们要加上use-default-filters="false",这样就不会自动扫描了,<context:include-filtter>与< context:exclude-filtter >使用方法一致,
另外一种是使用assignable方式,根据类名锁定目标。这里就再演示了
通过注解配置Bean的更多相关文章
- [原创]java WEB学习笔记103:Spring学习---Spring Bean配置:基于注解的方式(基于注解配置bean,基于注解来装配bean的属性)
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Spring(二)--FactoryBean、bean的后置处理器、数据库连接池、引用外部文件、使用注解配置bean等
实验1:配置通过静态工厂方法创建的bean [通过静态方法提供实例对象,工厂类本身不需要实例化!] 1.创建静态工厂类 public class StaticFactory { private st ...
- Spring(十五):通过注解配置 Bean
在ClassPath中扫描组件 1)组件扫描(component scanning):Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件: 2)特定组件包含: --- @C ...
- IDEA02 利用Maven创建Web项目、为Web应用添加Spring框架支持、bean的创建于获取、利用注解配置Bean、自动装配Bean、MVC配置
1 环境版本说明 Jdk : 1.8 Maven : 3.5 IDEA : 专业版 2017.2 2 环境准备 2.1 Maven安装及其配置 2.2 Tomcat安装及其配置 3 详细步骤 3.1 ...
- Spring IOC机制之使用注解配置bean
一. 通过注解配置bean 1.1 概述 相对于XML方式而言,通过注解的方式配置bean更加简洁和优雅,而且和MVC组件化开发的理念十分契合,是开发中常用的使用方式. 1.2 ...
- 14Spring通过注解配置Bean(2)
下面将对13Spring通过注解配置Bean(1)的中Repository.Service.Controller通过注解方式来建立关联. <context:component-scan>元 ...
- 13Spring通过注解配置Bean(1)
配置Bean的形式:基于XML文件的方式:基于注解的方式(基于注解配置Bean:基于注解来装配Bean的属性) 下面介绍基于注解的方式来配置Bean. ——组件扫描(component scannin ...
- Spring框架入门之基于Java注解配置bean
Spring框架入门之基于Java注解配置bean 一.Spring bean配置常用的注解 常用的有四个注解 Controller: 用于控制器的注解 Service : 用于service的注解 ...
- Spring 注解配置Bean
一.使用注解配置Bean 1.注解 在类定义.方法定义.成员变量定义前使用.其简化<bean>标签,功能同<bean>标签.格式为: @注解标记名. 2.组件扫描 Spring ...
随机推荐
- Java开发笔记(五十)几种开放性修饰符
前面介绍子类继承父类的时候,提到了public(公共)和private(私有)两个修饰符,其中public表示它所修饰的实体是允许外部访问的:而private表示它所修饰的实体不允许外部访问,只能在当 ...
- AI书单
1.<TensorFlow实战> 黄文坚 2.<Machine Learning> [美]Tom Mitchell 3.<机器学习> 周志华
- 折腾Java设计模式之解释器模
解释器模式 解释器模式是类的行为模式.给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器.客户端可以使用这个解释器来解释这个语言中的句子. 意图 给定一个语言,定义它的文法表 ...
- 【大数据】了解Hadoop框架的基础知识
介绍 此Refcard提供了Apache Hadoop,这是最流行的软件框架,可使用简单的高级编程模型实现大型数据集的分布式存储和处理.我们将介绍Hadoop最重要的概念,描述其架构,指导您如何开始使 ...
- Spring Boot统一异常处理实践
摘要: SpringBoot异常处理. 原文:Spring MVC/Boot 统一异常处理最佳实践 作者:赵俊 前言 在 Web 开发中, 我们经常会需要处理各种异常, 这是一件棘手的事情, 对于很多 ...
- 纯CSS实现点击事件展现隐藏div菜单列表/元素切换
在写移动端导航的时候经常用到点击按钮出现/隐藏导航条的情况,最常见的方法当然还是前端框架直接调用,省心省力,不易出错:当然还有使用纯JS实现的小代码段.我这里整理了纯CSS实现方式,给需要的人和给自己 ...
- Cesium 之简介以及离线部署运行篇
前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. C ...
- EntityFramework实体默认值遇到Oracle自增主键
1. Oracle实现主键自动增长 一般我们在Oracle实现主键自动增长,通常通过序列加触发器实现. 定义序列用于获取递增数字 CREATE SEQUENCE 序列名 [INCREMENT BY n ...
- 42.Odoo产品分析 (四) – 工具板块(10) – 问卷(2)
查看Odoo产品分析系列--目录 接上一篇Odoo产品分析 (四) – 工具板块(10) – 问卷(1) 4 页面 即问卷,点开一项查看: 可以看出,网页就是问卷本身的子目录,其中指明了该目录包括哪 ...
- python集合使用范例的代码
在代码过程中中,将代码过程中比较好的代码段珍藏起来,如下的代码是关于python集合使用范例的代码,希望能对大伙有用. # sets are unordered collections of uniq ...