spring笔记--通过注解(annotation)配置Bean
Spring能够在classpath下自动扫描,侦测和实例化具有特定注解的组件,这在Spring中成为组件扫描(Component scanning).
特定组件的注解包括:
@Component:基本注解,标识了一个受spring管理的组件.
@Repository:标识持久层组件
@Service:标识服务层(业务层)组件
@Controller:标识表现层组件
对于扫描上的组件,Spring有默认的命名策略,使用非限定类名,第一个字母小写,也可以在注解中通过value属性值表示组件的名称.
当在组件上使用了特定的注解之后,还需要在spring的配置文件中声明:
<context:component-scan base-package="com.wang" resource-pattern="dao/*.class"></context:component-scan>
其中bese-package是必须的属性,resource-pattern是可选的属性
bese-package:制定一个需要扫描的基类包Spring容器将会扫描这个基类包及其子类包中的所有类.当需要扫描多个包时,可以使用逗号隔开.
resource-pattern:如果仅希望扫描特定的类,而非基包下的所有类,可以使用这个属性过滤特定的类.如上即表示只扫描com.wang的子包dao中的所有类.
组件装配:
<context:component-scan>元素还会自动注册AutowiredAnnotationBeanPostProcessor实例,该实例可以自动装配具有@autowired,@Resource,@Inject注解的属性.
使用@Autowired自动装配bean:
@Autowired注解自动装配具有兼容类型的单个Bean属性:
构造器,普通字段,一切具有参数的方法上都可以使用@autowired
默认情况下,所有使用@Autowired注解的属性都需要被设置,当Spring找不到匹配的Bean装配属性时,会抛出异常,如果某一属性允许不被设置,可以设置@Autowired注解的required=false
默认情况下,当IOC容器中存在多个类型兼容的bean时,通过类型的自动装配将无法工作,此时可以在@Qualifier注解里提供Bean的名称.
@Autowired注解也可以应用在数组类型,集合属性,Map类型上.
下面通过一个例子,来应用一下上面的知识点,包结构和类如下,是一个简单的mvc结构对User实现增删改查的例子:
User类:
//主要演示注解,这里不再定义属性
public class User { }
UserDao接口:
public interface UserDao { public void add();
public void delete();
public void update();
public void search();
}
UserDaoImpl类:
@Repository
public class UserDaoImpl implements UserDao { @Override
public void add() {
System.out.println("添加用户");
}
@Override
public void delete() {
System.out.println("删除用户");
}
@Override
public void update() {
System.out.println("更新用户");
}
@Override
public void search() { System.out.println("查询用户");
} }
UserService类:
@Service
public class UserService { @Autowired
private UserDao userDao; public void add() {
userDao.add();
System.out.println("service add.."); }
public void delete() {
userDao.delete();
System.out.println("service delete.."); }
public void update() {
userDao.update();
System.out.println("service update.."); }
public void search() {
userDao.search();
System.out.println("service search.."); }
}
UserAction类:
@Controller
public class UserAction { @Autowired
private UserService userService; @Autowired(required=false)
private User user;
public String add(){ userService.add();
System.out.println("UserAction add..");
System.out.println(user);
return null;
}
public String delete(){ userService.delete();
System.out.println("UserAction delete..");
return null;
}
public String update(){ userService.update();
System.out.println("UserAction update..");
return null;
}
public String search(){ userService.search();
System.out.println("UserAction search..");
return null;
} }
配置文件beans.xml:
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
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.2.xsd">
<context:component-scan base-package="com.wang" /> </beans>
测试代码:
public class Test1 { public static void main(String[] args) {
ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml"); UserAction userAction=(UserAction) ctx.getBean("userAction");
userAction.add(); }
}
打印结果:
添加用户
service add..
UserAction add..
null
因为在User类中,我们没有添加任何注解信息,而在UserAction类中定义属性user时,又在@Autowired中添加了required="false",所有打印出来的user为null.
spring笔记--通过注解(annotation)配置Bean的更多相关文章
- 跟着刚哥学习Spring框架--通过注解方式配置Bean(四)
组件扫描:Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件. 特定组件包括: 1.@Component:基本注解,识别一个受Spring管理的组件 2.@Resposit ...
- 通过注解(annotation)配置Bean
Spring能够在classpath下自动扫描,侦测和实例化具有特定注解的组件,这在Spring中成为组件扫描(Component scanning). 特定组件的注解包括: @Component:基 ...
- spring之通过注解方式配置Bean(一)
(1)组件扫描:spring能够从classpath下自动扫描.侦测和实例化具有特定注解的组件. (2)特定组件包括: @Component:基本注解,标识一个受spring管理的组件: @Respo ...
- Spring使用ioc注解方式配置bean
context层 : 上下文环境/容器环境 applicationContext.xml 具体示例: 现在ioc容器中添加context层支持: 包括添加xmlns:context.xsi:schem ...
- Spring初学之注解方式配置bean
直接看代码: UserController.java package spring.beans.annotation.controller; import org.springframework.be ...
- 跟着刚哥学习Spring框架--通过XML方式配置Bean(三)
Spring配置Bean有两种形式(XML和注解) 今天我们学习通过XML方式配置Bean 1. Bean的配置方式 通过全类名(反射)的方式 √ id:标识容器中的bean.id唯一. √ cl ...
- spring学习笔记 星球日two - 注解方式配置bean
注解要放在要注解的对象的上方 @Autowired private Category category; <?xml version="1.0" encoding=" ...
- JavaEE互联网轻量级框架整合开发(书籍)阅读笔记(10):通过注解(annotation)装配Bean之(@Configguration、@Component、@Value、@ComponentScan、@Autowired、@Primary、@Qualifier、@Bean)
一.通过注解(annotation)装配Bean 通过之前的学习,我们已经知道如何使用XML装配Bean,但是更多的时候已经不再推荐使用XML的方式去装配Bean,更多的时候会考虑注解(annotat ...
- Bean 注解(Annotation)配置(3)- 依赖注入配置
Spring 系列教程 Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of ...
随机推荐
- Ubuntu14.04或16.04下安装JDK1.8+Scala+Hadoop2.7.3+Spark2.0.2
为了将Hadoop和Spark的安装简单化,今日写下此帖. 首先,要看手头有多少机器,要安装伪分布式的Hadoop+Spark还是完全分布式的,这里分别记录. 1. 伪分布式安装 伪分布式的Hadoo ...
- linux配置ftp高级权限
建一个用于管理的ftp高级账号,ftproot,定义它的目录,也就是我们存放项目的地址,所属组www, useradd -d /home/www -g www ftproot www里存放很多项目,我 ...
- java.net.ConnectException: Connection timed out
原因可能如下: (1)生成的WSDL的IP地址是不是服务器的IP: (2)代码中是否需要代理,若否,取消代理,若是,设置代理:
- DoTween 应用设置
一.下载 官方下载地址:http://dotween.demigiant.com/download.php 二.安装 1.把下载到压缩包中的DOTween文件夹拷贝到项目文件中 2.安装DOTween ...
- Windows 下的 Redis 的启动
1. 首先需要去下载Windows 版本的Redis,地址:https://github.com/MSOpenTech/redis, 这里你可以选择下载源码后自己编译,也可以直接下载发布后的版本,我是 ...
- Jtable 表格按多列排序(支持中文汉字排序)
这两天公司让做一个Jtable表格的排序,首先按A列排序,在A列相等时按B列排序,B列相等时按C列排序,ABC三列可以任意指定,最多分三列,这样的一个需求.由于我是大神,所以必须做了出来.ok,不自恋 ...
- Devexpress treeList
1.数据绑定最基本的两个属性:KeyFieldName和ParentFieldName. SELECT OfficeID,OfficeName,ParentOfficeID FROM tOffice ...
- myeclipse tomcat内存溢出解决方法
Tomcat直接启动正常,通过myeclipse启动tomcat内存溢出.MyEclipse启动Tomcat无视catalina.bat中设置内存大小的问题.在 tomcat的catalina.bat ...
- java开发中JDBC连接数据库代码和步骤
JDBC连接数据库 •创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.l ...
- c#处理空白字符
空白字符是指在屏幕不会显示出来的字符(如空格,制表符tab,回车换行等).空格.制表符.换行符.回车.换页垂直制表符和换行符称为 “空白字符”,因为它们为与间距单词和行在打印的页 )的用途可以读取更加 ...