@martin0207
2018-04-23T14:25:39.000000Z
字数 3543
阅读 1013
Java学习
在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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://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;}@Overridepublic 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来注入@Resourcepublic 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");@Testpublic 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;}@Overridepublic String toString() {return "User [id=" + id + ", name=" + name + "]";}}
在UserService的setUser方法上添加@Resource注解,并且修改测试方法为:
@Testpublic 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
学习中,如果有错误或不足之处,请留言告诉我,我会尽快回复并改正。