基本使用
配置文件
在src文件夹下,创建xml文件,这个文件放置Spring的配置。一般使用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: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的Annotation -->
<context:annotation-config/>
<!-- 设定Spring去那些包中找Annotation -->
<context:component-scan base-package="spring"></context:component-scan>
</beans>
创建几个功能类
User类
public class User {
private int id;
private String name;
public User(int id, String name) {
this.id = id;
this.name = name;
}
public User() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + "]";
}
}
UserDao类
public class UserDao {
public void add(User user) {
System.out.println("add " + user);
}
public void delete(int id) {
System.out.println("delete " + id);
}
}
UserService类
public class UserService {
private UserDao userDao;
private User user;
public void add() {
userDao.add(user);
}
public void delete(int id) {
userDao.delete(id);
}
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
添加类注解
以上三个类中,UserDao和UserService类需要注解,我们在类的上面添加注解:
@Component("userDao")
public class UserDao {
……
}
@Component("userService")
public class UserService {
……
}
类注解添加完成后,还需要对变量的set方法添加注解resource
。
@Component("userService")
public class UserService {
private UserDao userDao;
private User user;
public void add() {
userDao.add(user);
}
public void delete(int id) {
userDao.delete(id);
}
public UserDao getUserDao() {
return userDao;
}
//默认通过名称注入,在JSR330中提供了@Inject来注入
@Resource
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
测试
创建测试类
public class TestIoc {
private BeanFactory factory = new ClassPathXmlApplicationContext("beans.xml");
@Test
public void test01() {
User user = new User(1,"annotation");
UserService service = factory.getBean("userService",UserService.class);
service.setUser(user);
service.add();
service.delete(11);
}
}
测试结果
add User [id=1, name=annotation]
delete 11
运行一遍之后,相信已经了解Annotation实现IOC的流程。相较于xml的实现,Annotation的实现更加简单便捷。具体取舍看个人的喜好。
注解的细化
我们当然可以使用@Component来对注入类注解,但是Spring提供了更细化的注解,让编程者更清楚的区分各个类
注解 | 含义 |
---|---|
@Component | 是公共的,创建bean的注解 |
@Repository | 专门用于Dao注入的注解,数据库处理 |
@Service | 业务层注解 |
@Controller | action作为控制器,一般用这个注解 |
单例/多例注解
记得上篇Spring学习——IOC由xml实现讲过,bean中有scope属性,可以设置注入类的单例/多例模式。
那么来到Annotation实现IOC时,我们就需要使用@Scope注解来设置单例/多例模式:
@Component("userService")
@Scope("prototype")
public class UserService {
……
}
可以自己做个简单测试,这里不做赘述。
非注入类的变量注解
上一篇Blog看的仔细,那么猜猜或许能够猜到如何实现,对,使用value。
@Component("user")
public class User {
private int id;
private String name;
public User(int id, String name) {
this.id = id;
this.name = name;
}
public User() {
}
public int getId() {
return id;
}
@Value("22")
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
@Value("注解名")
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + "]";
}
}
在UserService的setUser方法上添加@Resource注解,并且修改测试方法为:
@Test
public void test01() {
// User user = new User(1,"annotation");
UserService service = factory.getBean("userService",UserService.class);
// service.setUser(user);
service.add();
service.delete(11);
}
测试结果
add User [id=22, name=注解名]
delete 11
最后
学习中,如果有错误或不足之处,请留言告诉我,我会尽快回复并改正。
即时更新地址