Spring 的bean管理(注解)
- 注解的介绍
1.代码里面特殊标记,使用注解可以完成功能。
2.注解写法 @注解名称(属性名称=属性值)。
3.注解使用在类上面,方法上面 和 属性上面
- 一.Spring注解开发准备
- 1.导入jar包
- (1)导入基本jar包
- (2)导入aop的jar包
- (1)导入基本jar包
- 1.导入jar包
- 2.创建类User,创建方法add()
public class User {
public void add(){
System.out.println("add.............");
}
}
- 3.创建spring配置文件applicationContext.xml,引入约束
* Spring学习第一天做IOC基本功能时,引入约束beans
* 做Spring的IOC注解开发,需要引入新的约束context
// 新增Spring的context约束
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
//完整约束如下:
<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"> <!-- bean definitions here -->
- 开启注解扫描
<!-- 开启注解扫描 到包里面扫描类、方法、属性上面是否有注解-->
<context:component-scan base-package="edu.njxzc.anno"></context:component-scan>
<!-- 只会扫描属性上的注解 -->
<!-- <context:annotation-config></context:annotation-config> -->
-
二.注解创建对象
- 1、在创建对象的类上面使用注解
@Component(value="user")//<bean id="user" class=""> public class User { public void add(){ System.out.println("add............."); } }
- 测试注解实现的IOC是否成功
@Test public void testUser(){ ApplicationContext context= new ClassPathXmlApplicationContext("applicationContext.xml"); User user=(User) context.getBean("user"); System.out.println(user); user.add(); User user1=(User) context.getBean("user"); System.out.println(user.equals(user1)); }
测试代码成功运行,同时user和user1显示为同一对象,这是因为Spring创建的bean默认都是singleton单实例的,如果想要创建出的User对象为多实例,需要在User类的加@Scope(value=“prototype”)注解
- 三.Spring注解详解
- 1.Spring创建对象有四个注解,其他三个为@Component的衍生注解(功能目前基本一致,都是创建出对象)
* @Controller : WEB层
* @Service : 业务层
* @Repository : 持久层- 2.通过@Scope(value=“prototype”)注解可以设置创建的对象为多实例
- 3.注解注入属性
- (1) 创建service类,创建dao类,并通过注解得到对象
- 1.Spring创建对象有四个注解,其他三个为@Component的衍生注解(功能目前基本一致,都是创建出对象)
@Component(value="userDao123")
public class UserDao {
public void add(){
System.out.println("UserDao........");
}
}
@Service(value="userService")
public class UserService {
public void add(){
System.out.println("service...........");
userDao.add();
}
}
- (2).在service类里面定义Userdao属性,并通过@Autowired注解或者@Resource注解注入
@Service(value="userService")
public class UserService {
//得到dao对象
//1、定义Dao类型的属性 在Dao属性上使用注解完成对象的注入
//@Autowired
//private UserDao userDao;
@Resource(name="userDao123")
private UserDao userDao;
public void add(){
System.out.println("service...........");
userDao.add();
}
public UserDao getUserDao() {
return userDao;
}
}
-
- 测试
@Test
public void testUserService(){
ApplicationContext context=
new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService=(UserService) context.getBean("userService");
System.out.println(userService);
userService.getUserDao().add();
}
- @Autowired和@Resource注解使用的注意点:
- @Autowired注解根据类名找到对象并注入,与@Component(value=“userDao”)中的value值无关;而@Resource注解中name属性值写的是注解创建dao对象的注解中的value值
- 使用注解方式时不需要生set方法