注解方式实例化Java类
context:component-scan标签:
Sprng容器通过context:component-scan标签扫描其base-package标签属性值指定的包及其子包内的所有的类并实例化被@Component、@Repository、@Service或@Controller等注解所修饰的类。
@Component:基本注解
@Respository:持久层(一般为dao层)注解
@Service:服务层或业务层(一般为service层)注解
@Controller:控制层(一般为controller层)注解
默认情况下Spring依据默认命名策略为通过注解实例化的对象命名:类名第一个字母小写. 也可以在注解中通过@Component、@Repository、@Service或@Controller注解的value属性标识名称。
bean内属性赋值:
Sprng容器通过context:component-scan标签扫描时还会自动实例化AutowiredAnnotationBeanPostProcessor 类, 该实例对象可以自动装配具有 @Autowired 和 @Resource 或@Inject注解的属性。
@Autowired
1、成员变量(不考虑访问权限)、构造函数或setter方法都可以使用@Autowired注解
2、默认情况下@Autowired 注解依据类型自动为成员变量赋值,当 IOC 容器里存在多个类型相同的 Bean 对象时就会依据成员变量名进行赋值,此时要求变量名必须是多个Bean对象中的一个,否则就会出现异常, 该异常可以通过在 @Qualifier 注解指定实例名的方式解决;
3、默认情况下,通过@Authwired 注解为成员变量赋值时,如果Spring 找不到匹配的 Bean为成员变量赋值则会抛出异常;如果该成员变量允许不被设置, 可以设置 @Authwired 注解的 required 属性为 false;
操作如下所示:
//创建一个类
package com.zzj.vo; import java.util.Date; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component; //使用Component基本注解
@Component
public class School { //bean内属性赋值
@Autowired
//从多个实现类中选择需要的,如果不加当有多个实现类时会报错
@Qualifier("b")
private Date birth; public Date getBirth() {
return birth;
} public void setBirth(Date birth) {
this.birth = birth;
} }
<!--application.xml-->
<bean id="b" class="java.util.Date"></bean>
<bean id="p" class="java.util.Date"></bean>
<!--Spring扫描com.zzj.vo包中Date类,由于该类使用了@Component注解,所以该类被实例化-->
<context:component-scan base-package="com.zzj.vo"></context:component-scan>
//测试类
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
System.out.println(context.getBean(School.class).getBirth());
注意:
1、使用context:component-scan标签需要添加spring-aop-4.3.10.RELEASE.jar包
2、base-package标签属性属性值:
a、Spring 容器将会扫描该属性值指定包及其子包中的所有类;
b、该属性值支持*通配符,例如“com.lq.*.imp”表示扫描诸如com.lq.book.imp包及其子包中的类;
c、当需要扫描多个包时, 使用逗号分隔;
d、resource-pattern标签属性可以指定Spring容器仅扫描特定的类而非基包下的所有类,比如resource-pattern="/*.class"表示只扫描基包下的类,基包的子包不会被扫描。
context:component-scan子标签:
1、<context:include-filter> 子标签设定Spring容器扫描时仅扫描哪些expression指定的类,该子标签需要和context:component-scan父标签中的use-default-filters属性一起使用;
2、<context:exclude-filter>子标签设定Spring容器扫描时不扫描哪些expression指定的类;
<context:component-scan base-package="com.zzj.vo">
<context:exclude-filter type="annotation" expression=""/>
<context:include-filter type="annotation" expression=""/>
</context:component-scan>
注解方式实例化Java类的更多相关文章
- spring利用注解方式实现Java读取properties属性值
1. 建立properties文件:我在resource下面建立一个config文件夹,config文件夹里面有mytest.properties文件,文件内容如下: sam.username=sam ...
- 【转】Spring学习---Bean配置的三种方式(XML、注解、Java类)介绍与对比
[原文]https://www.toutiao.com/i6594205115605844493/ Spring学习Bean配置的三种方式(XML.注解.Java类)介绍与对比 本文将详细介绍Spri ...
- Spring框架学习(6)使用ioc注解方式配置bean
内容源自:使用ioc注解方式配置bean context层 : 上下文环境/容器环境 applicationContext.xml 1 ioc注解功能 注解 简化xml文件配置 如 hibernate ...
- 【spring boot】14.spring boot集成mybatis,注解方式OR映射文件方式AND pagehelper分页插件【Mybatis】pagehelper分页插件分页查询无效解决方法
spring boot集成mybatis,集成使用mybatis拖沓了好久,今天终于可以补起来了. 本篇源码中,同时使用了Spring data JPA 和 Mybatis两种方式. 在使用的过程中一 ...
- Jsonschema2pojo从JSON生成Java类(Maven)
1.说明 jsonschema2pojo工具可以从JSON Schema(或示例JSON文件)生成Java类型, 并且可以配置生成Jackson 1.x,Jackson 2.x, Moshi 1.x或 ...
- Spring框架中的AOP技术----注解方式
利用AOP技术注解的方式对功能进行增强 CustomerDao接口 package com.alphajuns.demo1; public interface CustomerDao { public ...
- spring注解方式在一个普通的java类里面注入dao
spring注解方式在一个普通的java类里面注入dao @Repositorypublic class BaseDaoImpl implements BaseDao {这是我的dao如果在servi ...
- Spring学习笔记之 Spring IOC容器(二) 之注入参数值,自动组件扫描方式,控制Bean实例化方式,使用注解方式
本节主要内容: 1. 给MessageBean注入参数值 2. 测试Spring自动组件扫描方式 3. 如何控制ExampleBean实例化方式 4. 使用注解方式重构Jdb ...
- JAVA配置&注解方式搭建简单的SpringMVC前后台交互系统
前面两篇文章介绍了 基于XML方式搭建SpringMVC前后台交互系统的方法,博文链接如下: http://www.cnblogs.com/hunterCecil/p/8252060.html htt ...
随机推荐
- Caffe2 的基本数据结构(Basics of Caffe2 - Workspaces, Operators, and Nets)[4]
这篇文章主要介绍Caffe2的基本数据结构: Workspaces Operators Nets 在开始之前最好先阅读以下Intro Turorial 首先,导入caffe2.其中core和works ...
- 【python-leetcode25-翻转链表】K 个一组翻转链表
问题描述: 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度. 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序. 示例 ...
- Uber为何会成为共享经济中全球市值最大的独角兽企业?
自5月10日登陆纽交所以来,Uber的股价就像过山车一般起起伏伏,让无数投资者痛并快乐着.不过在经过半个月时间的试探后,如今Uber的股价已经稳定在40美元左右.截至美国东部时间5月24日股市收盘,U ...
- Linux--常用的linux基本命令学习大全01(适合所有人群)
常用 Linux 命令的基本使用 序号 命令 对应英文 作用 01 ls list 查看当前文件夹下的内容 02 pwd print wrok directory 查看当前所在文件夹 03 cd [目 ...
- redhat 7.6 密码破解(无光盘)
开机,在下面界面按e 找到linux16 在最尾输入 rd.break 按 Ctrl+x 输入 mount -o remount,rw /sysroot 输入chroot /sysroot sh ...
- Python 之并发编程之进程中(守护进程(daemon)、锁(Lock)、Semaphore(信号量))
五:守护进程 正常情况下,主进程默认等待子进程调用结束之后再结束守护进程在主进程所有代码执行完毕之后,自动终止kill -9 进程号 杀死进程.守护进程的语法:进程对象.daemon = True设置 ...
- 113、Java中String类之字符串文本分割IP地址
01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...
- LeetCode刷题--26.删除排序数组中的重复项(简单)
题目描述 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度.不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(1)额外空间的条件下完成. 示例 ...
- java swing简介
java应用程序用户界面开发包 Swing是一个用于开发Java应用程序用户界面的开发工具包.它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格.Swing开发人员只用很少 ...
- Xcode Edit Schemes
关于本文:有关“Xcode Edit Schemes”的设置,还是有很大的学问的.由于时间关系,我一点一点的补充. 1.在开发的时候,至少将Run的Build Configuration设置为Debu ...