Spring的bean管理(注解方式)
注解:代码中的特殊标记,注解可以使用在类、方法、属性上面,使用注解可实现一些基本的功能。注解的写法是@注解名称(属性=属性值)。
使用注解创建对象
第一步,创建Web项目,引入Spring的开发包
第二步,编写相关的类
在src目录下创建一个cn.itcast.anno包,并在该包下编写一个User类。
public class User {
public void add() {
System.out.println("add....................");
}
}
第三步,创建Spring配置文件
- 在Spring配置文件中引入约束,如下:
<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.xsd">
- 在Spring配置文件中做些事情,即开启注解扫描。
<!-- 开启注解的扫描。到配置的包里面扫描类、方法、属性上面是否有注解 -->
<context:component-scan base-package="cn.itcast"></context:component-scan>注意:也可以这样开启注解扫描,如下:
<context:annotation-config></context:annotation-config>
但是这种开启注解扫描的方式,只会扫描属性上面的注解。实际开发中用到的并不多!故不推荐使用。
第四步,在创建对象所在的类上面使用注解实现
@Component(value="user") // 类似于<bean id="user" class="..." />
public class User { public void add() {
System.out.println("add....................");
} }
如若注解里面属性名称是value,则可以省略,所以上面的User类亦可这样写为:
@Component("user") // 类似于<bean id="user" class="..." />
public class User {
public void add() {
System.out.println("add....................");
}
}
第五步,编写测试类
在cn.itcast.anno包下编写一个TestDemo单元测试类。
public class TestDemo {
@Test
public void testUser() {
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
User user = (User) context.getBean("user");
System.out.println(user);
user.add();
}
}
Spring的bean管理中常用的注解
创建对象的注解有四个:
作用在类上@Component:@Repository:用于对DAO实现类进行标注(持久层)。@Service:用于对Service实现类进行标注(业务层)。@Controller:用于对Controller实现类进行标注(WEB层)。
后三个注解是Spring中提供的@Component的三个衍生注解(功能目前来讲是一样的),它们是为了让标注类本身的用途更清晰,Spring在后续的版本中会对其进行增强。
bean的作用范围的注解
@Scope
- singleton:单例,默认值
- prototype:多例
所以我们可通过注解设置创建对象是单例或者还是多实例的。这样User类的代码亦可写为:
@Service("user")
@Scope("singleton")
public class User {
public void add() {
System.out.println("add....................");
}
}
使用注解注入属性(对象)
这儿,我举个例子来说明如何使用注解注入(对象类型的)属性。
先创建业务层中的UserService类:
public class UserService {
public void add() {
System.out.println("service...........");
}
}
再创建持久层中的UserDao类:
public class UserDao {
public void add() {
System.out.println("dao................");
}
}
以上两个类都创建在cn.itcast.anno包中。我们要实现的目的是在UserService类里面调用UserDao类的方法,这样我们就要在UserService类里面得到UserDao类的对象。之前是采用xml配置文件的方式来注入属性的,本文将使用注解的方式完成注入属性的操作。
- 在UserService类里面定义UserDao类型属性
private UserDao userDao;
在UserService类里面定义UserDao类型的属性,由于是使用注解的方式,故不需要手动生成set方法。
- 进行注解方式实现属性注入
- 创建UserDao类的对象和UserService类的对象
@Service("userService")
public class UserService { private UserDao userDao; public void add() {
System.out.println("service...........");
userDao.add();
} }@Repository("userDao")
public class UserDao { public void add() {
System.out.println("dao................");
}
} - 在UserService类里面注入UserDao类的对象,使用注解来实现。首先我使用
@Autowired注解来实现。@Service("userService")
public class UserService { @Autowired
private UserDao userDao; public void add() {
System.out.println("service...........");
userDao.add();
} }注意:使用注解
@Autowired,它不是根据名字去找Dao,而是默认按类型进行装配。
当然了,也可使用@Resource注解来实现,如下:@Service("userService")
public class UserService { @Resource(name="userDao")
private UserDao userDao; public void add() {
System.out.println("service...........");
userDao.add();
} }注意,使用
@Resource注解,它默认是按名称进行注入的。在实际开发中,我们也是使用@Resource注解来注入属性的,注解@Autowired用到的并不多。
- 创建UserDao类的对象和UserService类的对象
Spring的bean管理(注解方式)的更多相关文章
- Spring之Bean管理------注解方式
编写测试类 1,编写相关的类 public interface UserDao { public void sayHello(); } public class UserDaoImpl impleme ...
- IoC容器-Bean管理注解方式(创建对象)
IoC操作Bean管理(基于注解方式) 1,什么是注解 (1)注解是代码特殊标记,格式:@注解名称(属性名称=属性值,属性名称=属性值...) (2)使用注解,注解作用在类上面,方法上面,属性上面 ( ...
- IoC容器-Bean管理注解方式(注入属性@Autowired和Qualifier)
基于注解方式实现属性注入 (1)@Autowired:根据属性类型进行自动装配 第一步 把 service 和 dao 对象创建,在service 和 dao 类添加创建对象注解 第二步 在servi ...
- IoC容器-Bean管理注解方式(完全注解开发)
完全注解开发 (1)创建配置类,替代xml配置文件 (2)编写测试类 在实际中一般用springboot做
- IoC容器-Bean管理注解方式(组件扫描配置)
4,开启组件扫描细节配置
- Spring 的Bean管理的常用注解
属性注入的注解(使用注解注入的方式,可以不用提供set方法) @Value 用于注入普通类型 @Autowired 自动装配 :默认按类型进行装配 按名称注入 @Qualifier 强制使用名称注入 ...
- 面试阿里,字节,美团必看的Spring的Bean管理详解
IOC容器 工厂只负责创建对象,而Spring当然不仅仅是一个对象工厂,其核心是一个对象容器,其具备控制反转的能力,所以也称为IOC容器. 帮助我们存放对象,并且管理对象,包括:创建.销毁.装配,这样 ...
- (转)Spring的bean管理(注解方式)
http://blog.csdn.net/yerenyuan_pku/article/details/69663779 Spring的bean管理(注解方式) 注解:代码中的特殊标记,注解可以使用在类 ...
- Spring 的 Bean 管理(注解方式)
Spring 的 Bean 管理(注解方式) 1. 导入必要的 jar 包和 xml 文件 使用注解需要导入 spring-aop 的 jar 包. applicationContext.xml 文件 ...
随机推荐
- 凭什么相信你,我的CNN模型
背景 学术界一直困惑的点是"如何让看似黑盒的CNN模型说话",即对它的分类结果给出解释. 这里的解释是指,让模型告诉我们它是通过图片的哪些像素做出判断的,并不是深度学习理论层面的解 ...
- [转]用JAVA在读取EXCEL文件时如何判断列隐藏
原文地址:https://www.cnblogs.com/OwenWu/archive/2012/01/03/2310620.html org.apache.poi.hssf.usermodel.HS ...
- Python threading 多参数传递方法
今天开启线程传递参数的时候,出现了一个小问题,一直不能传递多个参数,如下 import threading thread1 = threading.Thread(target=fun, args=[1 ...
- oracle sql语句实现累加、累减、累乘、累除
在oracle开发过程中经常会遇到累加.减.乘.除的问题.下面对这个做个小的总结 ---创建测试表 CREATE TABLE TEST( PARENT_ID NUMBER, PART_ID NUMBE ...
- win2003 序列号 windows2003 sp2可用序列号大全(准版与企业版)
通用性好的win2003序列号: (推荐先用这个里面的) FJ8DH-TQPYG-9KFHQ-88CB2-Y7V3Y GRD4P-FTQQF-JCDM8-4P6JK-PFG7M JD7JX-KCDTH ...
- springmvc date
数据格式化,从本质上讲属于数据转换的范畴.Spring就是基于数据转换框架植入“格式化”功能的. 在数据转换时我们进行了如下配置: 我们使用的是ConversionServiceFactoryBean ...
- Oracle字段根据逗号分割查询数据
需求是表里的某个字段存储的值是以逗号分隔开来的,要求根据分隔的每一个值都能查出来数据,但是不能使用like查询. 数据是这样的: 查询的sql如下: select * from ( select gu ...
- DHT网络
@(基础技术) 现在有一种方法,可以通过磁力链接,例如magnet:?xt=urn:btih:0482e0811014fd4cb5d207d08a7be616a4672daa,就可以获取BT文件. 这 ...
- sparksql udf自定义函数中参数过多问题的解决
在进行spark sql数据库操作中,常常需要一些spark系统本身不支持的函数,如获取某一列值中的字符串. 如要获取 “aaaakkkkk”中的第4-第8个字符. 针对这种需求,只有设置UDF来实现 ...
- Spring AOP的简单示例
配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://w ...