Spring 中使用 xml 配置开发和使用注解开发案例

1、Spring 中使用 xml 配置开发案例

接口

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>

测试函数

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);
}
}

结果如下所示:

UserAction 方法调用。

Service 添加用户信息======>User{username='玉皇大帝', password='888', age=9999}。

Dao 添加用户信息======>User{username='玉皇大帝', password='888', age=9999}

可以看出是一层一层调用到 :action -> service -> dao

2、Spring 中使用注解开发案例

接口不变。修改接口的实现类

@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);
}
}

执行上面的测试函数即可在控制台打印和第一个案例一样的信息。

3、@Qualifier("id") & @Resource(name="id") 注解含义

如果在 UserServiceImpl 类上将注解修改为 @Service("myUserService")。如果需要注入指定 id 的类需要同时加上注解:@Autowired、@Qualifier("myUserService")。

@Autowired 是按照类型注入。

如果是接口,从容器中查找接口的实现类注入;如果是类,就在容器中查找类进行注入。

@Qualifier("id名称")是按照指定id注入。

@Resource(name="id") = @Autowired+@Qualifier("id") 。

4、@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 中默认注入是单例的。

最新文章

  1. C++点滴----关于类常成员函数
  2. linux系统中errno与error对照表
  3. iOS:缓存与Operation优先级问题
  4. 如何在Quartus II中设置Virtual pin
  5. ASP.NET 之 检测到在集成的托管管道模式下不适用的ASP.NET设置
  6. AJAX异步请求原理和过程
  7. 优先级和lisp式前缀表达式
  8. Servlet中通过过滤器实现统一的手动编码(解决中文乱码)
  9. springMVC servlet 静态资源加载
  10. 使用 Hive装载数据的几种方式
  11. 使用软件开发的部分思想,帮助HR处理Excel。
  12. [Swift]LeetCode69. x 的平方根 | Sqrt(x)
  13. 万能pb_ds头文件—bits/extc++.h
  14. 在Eclipse中运行Jboss时出现java.lang.OutOfMemoryError:PermGen space及其解决方法
  15. EditPlus常用快捷键[私人]
  16. 成都Uber优步司机奖励政策(4月23日)
  17. javaee 架构师之路
  18. Frame 框架的创建
  19. 注解@Slf4j
  20. Linux学习笔记3

热门文章

  1. Autoit 3 常用的语句
  2. S1 Python 基础
  3. LOJ 3090 「BJOI2019」勘破神机——斯特林数+递推式求通项+扩域
  4. QString的arg方法
  5. 建站手册-浏览器信息:挪威的 Opera 浏览器
  6. 建站手册-网站建设:Web 安全
  7. mockito测试入门学习
  8. 如何获得一个干净的 gnome 开发环境?
  9. C++中的类与封装
  10. 设置cookie,获取cookie