Spring 中使用 xml 配置開發和使用註解開發案例
一、Spring 中使用 xml 配置開發案例java
接口
public interface UserDao { void add(User user); } ======================================================================================== public interface UserService { void add(User user); }
接口的實現類
public class UserDaoImpl implements UserDao { @Override public void add(User user) { System.out.println("Dao 添加用戶信息======>" + user); } } ========================================================================================= public class UserServiceImpl implements UserService { private UserDao userDao; public void setUserDao(UserDao userDao) { this.userDao = userDao; } @Override public void add(User user) { System.out.println("Service 添加用戶信息======>" + user); userDao.add(user); } } ========================================================================================= 模擬UserAction調用方法 public class UserAction { private UserService userService; public void setUserService(UserService userService) { this.userService = userService; } public void save(User user) { System.out.println("UserAction 方法調用"); userService.add(user); } }
配置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"> <!-- 1.配置dao--> <bean id="userDao" class="com.example.demo.code.impl.UserDaoImpl"></bean> <!-- 2.配置service --> <bean id="userService" class="com.example.demo.code.impl.UserServiceImpl"> <property name="userDao" ref="userDao"></property> </bean> <!--3.配置action--> <bean id="userAction" class="com.example.demo.code.UserAction"> <property name="userService" ref="userService"></property> </bean> </beans>
測試函數spring
public class ServiceTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); UserAction userAction = context.getBean(UserAction.class); User user = new User(); user.setUsername("玉皇大帝"); user.setPassword("888"); user.setAge(9999); userAction.save(user); } }
結果以下所示:ide
UserAction 方法調用。Service 添加用戶信息======>User{username='玉皇大帝', password='888', age=9999}。函數
Dao 添加用戶信息======>User{username='玉皇大帝', password='888', age=9999}測試
能夠看出是一層一層調用到 :action -> service -> daothis
二、Spring 中使用註解開發案例prototype
接口不變。修改接口的實現類
@Repository public class UserDaoImpl implements UserDao { @Override public void add(User user) { System.out.println("Dao 添加用戶信息======>" + user); } } ========================================================================================= @Service public class UserServiceImpl implements UserService { @Autowired private UserDao userDao; @Override public void add(User user) { System.out.println("Service 添加用戶信息======>" + user); userDao.add(user); } } ========================================================================================= @Controller public class UserAction { @Autowired private UserService userService; public void save(User user) { System.out.println("UserAction 方法調用"); userService.add(user); } }
執行上面的測試函數便可在控制檯打印和第一個案例同樣的信息。
三、@Qualifier("id") & @Resource(name="id") 註解含義code
若是在 UserServiceImpl 類上將註解修改成 @Service("myUserService")。若是須要注入指定 id 的類須要同時加上註解:@Autowired、@Qualifier("myUserService")。@Autowired 是按照類型注入。xml
若是是接口,從容器中查找接口的實現類注入;若是是類,就在容器中查找類進行注入。接口
@Qualifier("id名稱")是按照指定id注入。
@Resource(name="id") = @Autowired+@Qualifier("id") 。
四、@Scope("prototype") 和 @Scope("singleton")
@Scope("singleton")
修改測試代碼,再次執行
public class ServiceTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); UserAction userAction = context.getBean(UserAction.class); UserAction userAction2 = context.getBean(UserAction.class); System.out.println(userAction); System.out.println(userAction2); } }
控制檯信息以下:com.example.demo.code.UserAction@7098b907
com.example.demo.code.UserAction@7098b907
說明 Spring 注入默認是單例。
@Scope("prototype")
在 UserAction 加上註解 @Scope("prototype") ,再次執行測試函數。控制檯信息以下:
com.example.demo.code.UserAction@7098b907
com.example.demo.code.UserAction@503f91c3
說明 Spring 注入能夠配置多例。
重點:Spring 中默認注入是單例的。