文档章节

Spring的学习(六):Annotation

yuhuan121
 yuhuan121
发布于 2017/08/26 11:19
字数 883
阅读 1
收藏 0
点赞 0
评论 0

1、搜索Bean类

Spring没有采用“约定优于配置”的策略,但是依然要求程序猿显式指定搜索某些路径下的Java类,并将这些Java类注册成Bean实例。此时,可以使用Annotation来标注Spring Bean ,使得Spring知道把哪些Java类当成Bean类处理。

Spring提供了如下几个类来标注Spring Bean :

  • @Component:标注一个普通的Spring Bean 类;
  • @Controller:标注一个控制器组件类;
  • @Service:标注一个业务逻辑组件类;
  • @Repository:标注一个DAO组件类;用于将数据访问层 (DAO 层 ) 的类标识为 Spring Bean

代码实现

每个Java类都使用了@Component标注,这表明这些Java类都将作为Spring的Bean类;

package org.crazyit.app.service.impl;
import org.springframework.stereotype.*;
import org.crazyit.app.service.*;
@Component
public class Chinese
	implements Person
{
	private Axe axe;
	// axe的setter方法
	public void setAxe(Axe axe)
	{
		this.axe = axe;
	}
	// 实现Person接口的useAxe()方法
	public void useAxe()
	{
		System.out.println(axe.chop());
	}
}
package org.crazyit.app.service.impl;
import org.springframework.stereotype.*;
import org.crazyit.app.service.*;
@Component
public class SteelAxe implements Axe
{
	public String chop()
	{
		return "钢斧砍柴真快";
	}
}
package org.crazyit.app.service.impl;
import org.springframework.stereotype.*;
import org.crazyit.app.service.*;
@Component
public class StoneAxe implements Axe
{
	public String chop()
	{
		return "石斧砍柴好慢";
	}
}

需要在配置文件中导入context Schema,并指定搜索路径,Spring将会自动搜索此路径下的所有Java类;

<?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-4.0.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context-4.0.xsd">
	<!-- 自动扫描指定包及其子包下的所有Bean类 -->
	<context:component-scan 
		base-package="org.crazyit.app.service"/>
</beans>

<context../>指定spring把此包和子包下的所有Java类都当做Spring类来处理,并为之创建相应的Bean实例。

也可以在使用@Component时指定Bean实例的名称,如:@Component("axe")

还可以通过为<component-scan../>元素添加两个子元素来指定Bean类:只要位于指定路径下的Java满足这种规则,即使没有使用Annocation标注,Spring同样会把它当成Bean类处理。

  • <include-filter../>:用于指定满足此规则的Java类被当成Bean类来处理;
  • <exclude-filter../>:用于指定满足此规则的Java类不会被当成Bean类来处理;
<!-- 自动扫描指定包及其子包下的所有Bean类 -->
	<context:component-scan 
		base-package="org.crazyit.app.service">
		<!-- 只将以Chinese、Axe结尾的类当成Spring容器中的Bean -->
		<context:include-filter type="regex"
			expression=".*Chinese"/>
		<context:include-filter type="regex"
			expression=".*Axe"/>
	</context:component-scan>

使用它俩时要求指定两属性:

  • type:指定过滤器类型;
  • expression:指定过滤器所需要的表达式;

Spring内建支持4种过滤器:

  • annotation:Annotation过滤器;
  • assignable:类名过滤器;
  • regex:正则表达式过滤器;
  • aspectj:AspectJ过滤器;

2、指定Bean的作用域

@Scope("作用域类型")

//指定该Bean实例的作用域为prototype
@Scope("prototype")

3、配置依赖

@Resource(name = " ") name属性为需要被注入的Bean的实例;

4、定制生命周期行为

@PostConstruct:修饰Bean的初始化方法; @PreDestroy:修饰Bean销毁之前的方法;

5、自动装配

@Autowired :指定自动装配,可以修饰setter方法、普通方法、实例变量和构造器等;

当用它标注setter方法时,默采用byType自动装配策略;

还可以标注多个参数的普通方法,spring会自动到容器中搜索类型匹配的Bean。若恰好为每个都找到一个,spring会自动以这些Bean作为参数来调用该方法;

当@Autowired 修饰一个实例变量时,spring会把容器中与该变量类型匹配的Bean设置为该实例变量的值;

© 著作权归作者所有

共有 人打赏支持
yuhuan121
粉丝 0
博文 36
码字总数 38704
作品 0
佛山
程序员
SpringBoot的幕后推手...

一、背景   这两年随着微服务的盛行,SpringBoot框架水到渠成的得到了高曝光,作为程序猿的我们,现在要是不知道一点SpringBoot相关的东西,貌似出去找工作都会被深深地鄙视,不过在我们开...

Java工程师-Distance ⋅ 06/01 ⋅ 0

springmvc学习笔记(3)-注解的处理器映射器和适配器

springmvc学习笔记(3)-注解的处理器映射器和适配器 标签: springmvc [TOC] 本文主要介绍注解的处理器映射器和适配器相关配置 默认加载 前端控制器从件中加载处理器映射器、适配器、视图解析...

brianway ⋅ 2016/03/09 ⋅ 0

详解Java的Spring框架中的注解的用法

使用Spring注解来注入属性 1.1. 使用注解以前我们是怎样注入属性的 类的实现: 配置文件: 1.2. 引入@Autowired注解(不推荐使用,建议使用@Resource) 类的实现(对成员变量进行标注) 或者...

Airship ⋅ 04/22 ⋅ 0

学习 Spring Boot 知识看这一篇就够了

从2016年因为工作原因开始研究 Spring Boot ,先后写了很多关于 Spring Boot 的文章,发表在技术社区、我的博客和我的公号内。粗略的统计了一下总共的文章加起来大概有六十多篇了,其中一部分...

ityouknow ⋅ 05/28 ⋅ 0

spring mvc 配置失效了?

版本:spring 3.0以上 项目中有两个spring的配置xml,如下 项目中的web.xml web.xml的配置如下: 1、ContextLoaderListener加载applicationContext-service-database.xml 2、DispatcherServl...

听柳 ⋅ 05/31 ⋅ 0

mybatis的xml配置和注解配置

xml配置 spring-application.xml spring-annotation-componentScan.xml spring-data.xml spring-mybatis.xml spring-transaction.xml 测试 注意: MapperScannerConfigurer 实现了BeanDefin......

乾坤刀 ⋅ 05/31 ⋅ 0

Spring整合Redis来实现session共享,项目启动报错

最近在学习分布式相关的东东。 搭了一个spring+springMVC+mybatis框架练手(spring用的是3.2.4,这个不会影响吧?)。 现在想用redis来实现多个tomcat的session共享。 在网上百度了一些教程,...

杀丶破狼 ⋅ 2016/11/10 ⋅ 5

Spring 3 MVC and JSR303 @Valid example

In Spring 3, you can enable “mvc:annotation-driven” to support JSR303 bean validation via annotation, if any JSR 303 validator framework on the classpath. Note Hibernate Vali......

凯文加内特 ⋅ 2015/10/10 ⋅ 0

Spring与SpringMVC的容器关系分析

Spring与SpringMVC的容器关系分析 结论: Spring(springContext.xml)容器配置,排除所有@controller 的Bean <context:component-scan base-package="com.service,com.util,com.dao" > Spri......

LYQ1990 ⋅ 2016/05/24 ⋅ 0

springmvc学习笔记(9)-springmvc整合mybatis之controller

springmvc学习笔记(9)-springmvc整合mybatis之controller 标签: springmvc mybatis [TOC] 本文介绍如何配置springmvc配置文件和web.xml,以及如何编写controller,jsp springmvc.xml 在文件下...

brianway ⋅ 2016/03/12 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

mysql5.7系列修改root默认密码

操作系统为centos7 64 1、修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不对密码进行验证 2、重启 mysqld 服务:systemctl restart mysql...

sskill ⋅ 13分钟前 ⋅ 0

Intellij IDEA神器常用技巧六-Debug详解

在调试代码的时候,你的项目得debug模式启动,也就是点那个绿色的甲虫启动服务器,然后,就可以在代码里面断点调试啦。下面不要在意,这个快捷键具体是啥,因为,这个keymap是可以自己配置的...

Mkeeper ⋅ 17分钟前 ⋅ 0

zip压缩工具、tar打包、打包并压缩

zip 支持压缩目录 1.在/tmp/目录下创建目录(study_zip)及文件 root@yolks1 study_zip]# !treetree 11└── 2 └── 3 └── test_zip.txt2 directories, 1 file 2.yum...

蛋黄Yolks ⋅ 19分钟前 ⋅ 0

聊聊HystrixThreadPool

序 本文主要研究一下HystrixThreadPool HystrixThreadPool hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/HystrixThreadPool.java /** * ThreadPool used to executed {@link Hys......

go4it ⋅ 38分钟前 ⋅ 0

容器之上传镜像到Docker hub

Docker hub在国内可以访问,首先要创建一个账号,这个后面会用到,我是用126邮箱注册的。 1. docker login List-1 Username不能使用你注册的邮箱,要用使用注册时用的username;要输入密码 ...

汉斯-冯-拉特 ⋅ 44分钟前 ⋅ 0

SpringBoot简单使用ehcache

1,SpringBoot版本 2.0.3.RELEASE ①,pom.xml <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELE......

暗中观察 ⋅ 45分钟前 ⋅ 0

监控各项服务

比如有三个服务, 为了减少故障时间,增加监控任务,使用linux的 crontab 实现. 步骤: 1,每个服务写一个ping接口 监控如下内容: 1,HouseServer 是否正常运行,所以需要增加一个ping的接口 ; http...

黄威 ⋅ 49分钟前 ⋅ 0

Spring源码解析(八)——实例创建(下)

前言 来到实例创建的最后一节,前面已经将一个实例通过不同方式(工厂方法、构造器注入、默认构造器)给创建出来了,下面我们要对创建出来的实例进行一些“加工”处理。 源码解读 回顾下之前...

MarvelCode ⋅ 49分钟前 ⋅ 0

nodejs __proto__跟prototype

前言 nodejs中完全没有class的这个概念,这点跟PHP,JAVA等面向对象的语言很不一样,没有class跟object的区分,那么nodejs是怎么样实现继承的呢? 对象 对象是由属性跟方法组成的一个东西,就...

Ai5tbb ⋅ 55分钟前 ⋅ 0

Ubuntu16.04 PHP7.0 不能用MYSQLi方式连接MySQL5.7数据库

Q: Ubuntu16.04 PHP7.0 不能用MYSQLi方式连接MySQL5.7数据库 A: 执行以下2条命令解决: apt-get install php-mysql service apache2 restart php -m 执行后会多以下4个模块: mysqli mysqlnd...

SamXIAO ⋅ 58分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部