Spring IOC的运用和扩展

IOC不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试;有了IOC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是 松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。

  其实IOC对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在IOC/DI思想中,应用程序就变成被动的了,被动的等待IOC容器来创建并注入它所需要的资源了。

IOC很好的体现了面向对象设计法则之一—— 好莱坞法则:“别找我们,我们找你”;即由IOC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找。

IOC(Inversion of Control,控制反转)。这是spring的核心,贯穿始终。所谓IOC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。这是什么意思呢,举个简单的例子,我们是如何找女朋友的?常见的情况是,我们到处去看哪里有长得漂亮身材又好的女孩,然后打听她们的兴趣爱好、QQ号、电话号、IQ号、IP号………,想办法认识她们,投其所好送其所要,然后嘿嘿……这个过程是复杂深奥的,我们必须自己设计和面对每个环节。传统的程序开发也是如此,在一个对象中,如果要使用另外的对象,就必须得到它(自己new一个,或者从JNDI中查询一个),使用完之后还要将对象销毁(比如Connection等),对象始终会和其他的接口或类藕合起来。        

    1. 定义持久化方法

    首先我们创建一个包名为com.it.csx_auto的架包,在这个架包下再创建一个工程项目名为BookDao,然后创建接口名为BookService,之后再创建类BookServiceImpl,最后再建立一份XML文件,建立一份类测试代码这个方法就完成了。具体如下:

package com.it.csx_auto;

public interface BookDao {

   public void save();

}

package com.it.csx_auto;

public class BookDaoImpl implements BookDao{

    String name;

    

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

@Override

public void save() {

// TODO Auto-generated method stub

System.out.println("BookDao save...."+name);

}

}

package com.it.csx_auto;

public interface BookService {

public void addbook();

}

package com.it.csx_auto;

public class BookServiceImpl implements BookService{

    private BookDao bookDaoId;        

    

public BookDao getBookDaoId() {

return bookDaoId;

}

public void setBookDaoId(BookDao bookDaoId) {

this.bookDaoId = bookDaoId;

}

@Override

public void addbook() {

// TODO Auto-generated method stub

   bookDaoId.save();

}

}

package com.it.csx_auto;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class test {

public static void main(String[] args) {

    String xmlPath="com/it/csx_auto/beans.xml";

    

    ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext(xmlPath);

       BookService bean = (BookService)classPathXmlApplicationContext.getBean("bookServiceId");  

            bean.addbook();

       

}

}

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xsi:schemaLocation="http://www.springframework.org/schema/beans

           http://www.springframework.org/schema/beans/spring-beans.xsd"

          default-autowire="byName">

<!-- 注意:别忘了添加default-autowire="byName"-->

 <!--  代码如下:-->

<!-- BookDaoImpl的实例化  注意: id="bookDao"中的bookDao这个名字要和BookServiceImpl类中的成员变量名字一致 -->

<bean id="bookDaoId" class="com.it.csx_auto.BookDaoImpl"></bean>

<bean id="bookServiceId" class="com.it.csx_auto.BookServiceImpl"></bean>

</beans>

    1. 增加用户user工厂类,用户实例创建工作

  我们首先创建一个包名为com.it.csx_factory的架包,其次创建名为MyBeanFactory的类,再创建名为UserService的接口,之后再创建名为UserServiceImpl的类,最后再建立XML文件,建立一份类的测试代码进行用户实例创建的工作检测。具体如下:

package com.it.csx_factory;

public class MyBeanFactory {

    public UserService createUserService(){

     

         return new UserServiceImpl();

    }

    

}

package com.it.csx_factory;

public interface UserService {

   public void addUser();

}

package com.it.csx_factory;

public class UserServiceImpl implements UserService{

@Override

public void addUser() {

// TODO Auto-generated method stub

System.out.println("addUser.....");

}

}

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       xsi:schemaLocation="http://www.springframework.org/schema/beans

           http://www.springframework.org/schema/beans/spring-beans.xsd">

         

<!-- 创建工厂实例  -->

       <bean  id="myBeanFactoryId"  class="com.it.csx_factory.MyBeanFactory"> </bean>

    

      <bean id="userServiceId" factory-bean="myBeanFactoryId" factory-method="createUserService"></bean>   

 </beans>

package com.it.csx_factory;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class test {

   public static void main(String[] args) {

      String  xmlPath="com/it/csx_factory/beans.xml";

        

          ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext(xmlPath);

          

             UserService bean = classPathXmlApplicationContext.getBean("userServiceId",UserService.class);

                     bean.addUser();

}

}

    1. 控制台输出userDaoId

   首先创建包名为com.it.jdbc的架包,然后创建名为user的类,再创建一个名为UserDao的类,之后再建立XML文件,建立一份类的测试代码进行控制台的输出,输出名为userDaoId。

package com.it.jdbc;

public class user {

    private Integer id;

    private String username;

    private String password;

    

    // 生成get  set 方法

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

 // 生成toString方法

@Override

public String toString() {

return "User [id=" + id + ", username=" + username + ", password="

+ password + "]";

}

}

package com.it.jdbc;

import org.springframework.jdbc.core.JdbcTemplate;

/*

 *   工具类 (对数据库操作)

 *

 */

public class UserDao {

           //使用spring进行注入

   private  JdbcTemplate   jdbcTemplate;

public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {

this.jdbcTemplate = jdbcTemplate;

}

//  更新数据库 (update方法)

  

public void update(user user){

   

    String sql="update t_user set username=?,password=? where id=?";

     Object[] args={user.getUsername(),user.getPassword(),user.getId()};

   jdbcTemplate.update(sql, args);

   }

}

<?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"

       xmlns:aop="http://www.springframework.org/schema/aop"

       xsi:schemaLocation="http://www.springframework.org/schema/beans

           http://www.springframework.org/schema/beans/spring-beans.xsd

           http://www.springframework.org/schema/aop

           http://www.springframework.org/schema/aop/spring-aop.xsd

           http://www.springframework.org/schema/context

           http://www.springframework.org/schema/context/spring-context.xsd">

           <!-- dbcp数据源

         查找BasicDataSource类的全路径:  shift+ctrl+t

       -->

     <bean id="dataSourceId" class="org.apache.commons.dbcp.BasicDataSource">

         <!-- 注入   却动-->

         <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>

         <!-- 注入地址 -->

         <property name="url"   value="jdbc:mysql://localhost:3306/day_jdbc?useUnicode=true&characterEncoding=utf-8"></property>

          <!-- 注入账号 -->

          <property name="username" value="root"></property>

          <!-- 注入密码 -->

          <property name="password" value="12345"></property>

     </bean>

     

       <!--对JdbcTemplate类实例化    -->

     <bean id="jdbcTemplateId" class="org.springframework.jdbc.core.JdbcTemplate">

          <!-- 注入数据源  -->

          <property name="dataSource" ref="dataSourceId"></property>

          

     </bean>

     

        <!-- 对UserDao工具类进行实例化  -->

     <bean id="userDaoId" class="com.it.jdbc.UserDao">

           <!--把JdbcTemplate的实例注入给userDao类中的jdbcTemplate成员变量  -->

        <property name="jdbcTemplate"   ref="jdbcTemplateId"></property>

     </bean>

     </beans>

package com.it.jdbc;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class test {

   public static void main(String[] args) {

           user user = new user();

               user.setId(4);

               user.setUsername("香香");

               user.setPassword("100");

              

       String xmlPath="com/it/jdbc/beans.xml";

   ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext(xmlPath);

                       UserDao bean =(UserDao) classPathXmlApplicationContext.getBean("userDaoId");

                       

                       bean.update(user);

   

   }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值