本文使用的项目和 java 项目中使用 sping (XML) 文章所使用的项目完全一样,annotation 相比于 XML 方式配置要更加方便快捷。 但是 XML 方式没有侵入性, 更加符合 spring 的特性。
先看一下项目结构吧:
然后是 Bean.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">
<context:annotation-config/>
<context:component-scan base-package="com.dqpi.spring" />
</beans>
context:annotation-config 表示使用 annotation 配置,context:component-scan 表示扫描所有 com.dqpi.spring 包下有注解的类, 完成 bean 的装配。
常用注解:
@Controller 定义控制层 Bean, 如 Action
@Service 定义业务层 Bean
@Repository 定义 DAO 层 Bean
@Component 定义组件 Bean,不用具体区分时使用。
User 模型类代码:
@Component
public class User {
private int age;
private String name;
public int getAge () {
return age;
}
@Value ("20")
public void setAge (int age) {
this.age = age;
}
public String getName () {
return name;
}
@Value ("大白")
public void setName (String name) {
this.name = name;
}
}
其中 @Value 注解是给变量赋值,可以写在成员属性上也可以写在 set 方法上。
UserDao 接口
public interface UserDAO {
public void save (User user);
}
UserDAOImp1 实现类
@Component
public class UserDAOImp1 implements UserDAO {
@Override
public void save (User user) {
System.out.println ("使用 MySQL 数据库");
System.out.println (user.getName ());
}
}
UserDAOImp2 实现类
@Component
public class UserDAOImp2 implements UserDAO {
@Override
public void save (User user) {
System.out.println ("使用 Oracl 数据库");
}
}
Userservice 业务类
@Component
public class Userservice {
private UserDAO userDAO;
private User user;
public UserDAO getUserDAO () {
return userDAO;
}
@Resource (name="userDAOImp1")
public void setUserDAO (UserDAO userDAO) {
this.userDAO = userDAO;
}
public User getUser () {
return user;
}
@Resource
public void setUser (User user) {
this.user = user;
}
public void add () {
this.userDAO.save (user);
}
}
@Resource 是 JSR-250 提供的标准,是由甲骨文收购 java 后提出的。@Resource 注解默认按名称装配,当找不到名称匹配的 bean 再按类型装配.
还有一种自动装配的注解,就是 @Autowired ,它默认按类型匹配,自动装配 (Srping 提供的)。当找到多个符合类型出错时,可以使用 @Qualifier 解决:
@Autowired
@Qualifier ("bean 的名字")
UserMain 启动方法
public static void main (String [] args) {
ApplicationContext context =
new ClassPathXmlApplicationContext ("Bean.xml");
Userservice userservice =context.getBean ("userservice",Userservice.class);
userservice.add ();
}
执行结果: