SpringIOC随笔(一)

布满荆棘的人生 2022-12-16 14:24 276阅读 0赞

SpringIOC随笔(一)

  1. 首先SpringIOC是什么:

    1. IOC(Inversion of Control):意为控制反转。
    2. 这是一种编程思想,不是一种技术!
    3. 我们把创建对象和对象之间的装配交给容器来管理。我们不用自己创建和管理这些对象,只需要使用什么对象的时候直接get就ok。
  2. 先看看没有IOC代码会是什么亚子

    1. java代码:

      1. public class UserServiceImpl implements UserService {
  1. private UserDao userDao;
  2. public UserServiceImpl() {
  3. //this.userDao = new UserDaoHibernateImpl();
  4. this.userDao = new UserDaoMybatisImpl();
  5. }
  6. @Override
  7. public void addUser(User user) {
  8. userDao.addUser(user);
  9. }
  10. }
  11. public class UserDaoHibernateImpl implements UserDao {
  12. @Override
  13. public void addUser(User user) {
  14. System.out.println("Hibernate add:" + user);
  15. }
  16. }
  17. public class UserDaoMybatisImpl implements UserDao {
  18. @Override
  19. public void addUser(User user) {
  20. System.out.println("Mybatis add:" + user);
  21. }
  22. }
  23. 2. 代码没有扩展性。如果换一个实现类,我们需要把代码进行修改,而且对象也要我们自己new
  24. 3. 我们先使用了工厂模式来创建UserDao类型的对象
  25. 4. public class UserDaoFactory {
  26. public static UserDao createUserDao() {
  27. UserDao userDao = null;
  28. try {
  29. Properties properties = new Properties();
  30. properties.load(UserDaoFactory.class.getClassLoader().getResourceAsStream("daoConfig.properties"));
  31. String userDaoClassName = properties.getProperty("UserDao");
  32. if (StringUtils.isNotBlank(userDaoClassName)){
  33. userDao = (UserDao) Class.forName(userDaoClassName).newInstance();
  34. }
  35. } catch (Exception e) {
  36. e.printStackTrace();
  37. }
  38. return userDao;
  39. }
  40. }
  41. 5. daoConfig.properties
  42. UserDao = com.fxyh.spring.dao.impl.UserDaoHibernateImpl
  43. #UserDao = com.fxyh.spring.dao.impl.UserDaoMybatisImpl
  44. 6. public UserServiceImpl() {
  45. // 代码没有扩展性。如果现在持久化策略编程mybatis实现,那么此时需要修改程序
  46. //this.userDao = new UserDaoHibernateImpl();
  47. //this.userDao = new UserDaoMybatisImpl();
  48. // 使用工厂来创建这个Dao,然后通过properties配置创建那个Dao实现不用该代码直接切换
  49. this.userDao = UserDaoFactory.createUserDao();
  50. }
  51. 在上面Service的构造方法里面创建dao改成工厂创建。
  52. 7. Test代码:
  53. public class UserServiceImplTest {
  54. private UserService userService;
  55. @Before
  56. public void setUp(){
  57. userService = new UserServiceImpl();
  58. }
  59. @Test
  60. public void addUser() {
  61. User user = new User();
  62. user.setName("zhangsan");
  63. user.setPassword("123456");
  64. userService.addUser(user);
  65. }
  66. }
  67. 8. 这个以及初步有点IOC的意思了,但是还是很繁琐,还得我们自己new,写工厂,那么我们就进入SpringIOC吧。
  1. 利用Spring框架来实现

    1. 引入jar包

      1. <properties>
      2. <spring.version>4.3.21.RELEASE</spring.version>
      3. </properties>
      4. <dependencies>
      5. <dependency>
      6. <groupId>org.springframework</groupId>
      7. <artifactId>spring-core</artifactId>
      8. <version>${spring.version}</version>
      9. </dependency>
      10. <dependency>
      11. <groupId>org.springframework</groupId>
      12. <artifactId>spring-context</artifactId>
      13. <version>${spring.version}</version>
      14. </dependency>
      15. <dependency>
      16. <groupId>org.springframework</groupId>
      17. <artifactId>spring-beans</artifactId>
      18. <version>${spring.version}</version>
      19. </dependency>
      20. <dependency>
      21. <groupId>org.apache.commons</groupId>
      22. <artifactId>commons-lang3</artifactId>
      23. <version>3.4</version>
      24. </dependency>
      25. <dependency>
      26. <groupId>commons-collections</groupId>
      27. <artifactId>commons-collections</artifactId>
      28. <version>3.2.1</version>
      29. </dependency>
      30. <dependency>
      31. <groupId>junit</groupId>
      32. <artifactId>junit</artifactId>
      33. <version>4.12</version>
      34. <scope>test</scope>
      35. </dependency>
      36. </dependencies>
    2. 在原来的基础上改动代码

      1. 把上面的代码Service实现类改动一下,去除构造方法,给userDao加一个set方法

        1. public class UserServiceImpl implements UserService {
        2. private UserDao userDao;
        3. public void setUserDao(UserDao userDao) {
        4. this.userDao = userDao;
        5. }
        6. @Override
        7. public void addUser(User user) {
        8. userDao.addUser(user);
        9. }
        10. }
    3. 编写Spring xml配置文件

      1. <?xml version="1.0" encoding="UTF-8"?>
      2. <beans xmlns="http://www.springframework.org/schema/beans"
      3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      4. xsi:schemaLocation="
      5. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
      6. <bean id="userDaoMybatisImpl" class="com.fxyh.spring.dao.impl.UserDaoMybatisImpl"/>
      7. <bean id="userDaoHibernateImpl" class="com.fxyh.spring.dao.impl.UserDaoHibernateImpl"/>
      8. <bean id="userService" class="com.fxyh.spring.service.impl.UserServiceImpl">
      9. <!-- <property name="userDao" ref="userDaoHibernateImpl"/>-->
      10. <property name="userDao" ref="userDaoMybatisImpl"/>
      11. </bean>
      12. </beans>
    4. 修改测试类

      1. public class UserServiceImplTest {
  1. private ApplicationContext context;
  2. private UserService userService;
  3. @Before
  4. public void setUp() throws Exception {
  5. this.context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
  6. // this.userService = (UserService) this.context.getBean("userService");
  7. this.userService = this.context.getBean(UserService.class);
  8. }
  9. @Test
  10. public void addUser() {
  11. User user = new User();
  12. user.setName("zhangsan");
  13. user.setPassword("123456");
  14. userService.addUser(user);
  15. }
  16. }
  17. 5. 我们需要切换一个dao的实现类只需要在xml中改变property就可以实现,Spring中,我们不需要写工厂,我们直接配置一些便可以实现。
  18. 6. 其实这里的话,**property中的name就是调用了我们的setUserDao方法,把name的首字母大写,然后在前面拼上set**。
  1. 这里我们先简单了解一下SpringIOC后续在详细介绍配置bean的方法。

发表评论

表情:
评论列表 (有 0 条评论,276人围观)

还没有评论,来说两句吧...

相关阅读

    相关 开发随笔

    最近这段时间看到上传的一篇文章 《VisualC++游戏编程导学》下载量比较多,大家评价的也比较好,于是自己也仔细看了下这篇文档,看过后确实不错。 于是专门写博文再给大家介