- ?:前面说了,spring IoC容器的Bean可以来自不同Resource,前面说了基于xml配置的Bean,现在来说基于注解的配置的Bean
- ?:之所以用注解,是为了更方便啦。
- ?:定义一个实体类User
package spring.annotation;
import org.springframework.stereotype.Component;
@Component //普通的Bean注解
public class User {
private String username;
private int age;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
private void haha() {
System.out.println("haha");
}
}
?:定义一个UserDao类,持久层的类,用@Repository(“userDao”)标志,这个注解是在@Component基础上扩展的,用来表示职责,代码是
package spring.annotation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
//@Component("userDao")
@Repository("userDao")
public class UserDao {
@Autowired
@Qualifier("user") //指定User Bean的id
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public void save() {
System.out.println("保存了 " + user.getUsername() + "用户");
}
}
?:编写业务层Service的类,用@Service标识,Bean的id默认是Service类的类名首字母小写,其他不变,代码如下
package spring.annotation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service("userService")
public class UserService {
@Autowired //自动匹配Bean,可以在xml文件中配置自动匹配的规则
private UserDao userDao;
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
}
最后别忘了配置一下applicationContext.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" default-autowire="byName">
<context:component-scan base-package="spring.annotation"></context:component-scan>
<!--<bean id="user" class="spring.annotation.User">
<property name="username">
<value>shiqi</value>
</property>
<property name="age">
<value>17</value>
</property>
</bean>-->
</beans>
?:最后就可以测试一下啦
package spring.annotation;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class annotationTest {
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("annotation.xml");
User user = (User)applicationContext.getBean("user");
user.setUsername("shiqi");
UserDao userDao = (UserDao)applicationContext.getBean("userDao");
System.out.println(userDao.getUser().getUsername());
UserService userService = (UserService)applicationContext.getBean("userService");
userService.getUserDao().save();
}
}
测试结果
- ?:实战中一般就是使用的Xml加注解的配置方式