一、spring依赖注入,低耦合

spring采用了四种策略来简化java开发的复杂性
1.基于POJO的轻量级和最小侵入性编程
2.通过依赖注入和面向接口编程实现松耦合
3.基于切面和惯例进行声明事编程
4.通过切面和模板减少样版编码

基于POJO的轻量级和最小侵入性编程
在spring之前的很多框架中,都是通过强迫应用继承和接口实现来实现功能,导致应用程序和框架绑死;例如:EJB2中的无状态会话bean。
Spring在创建POJO时,避免因自身API而弄乱你的应用代码。Spring不会强迫你实现spring规范的接口或者继承spring规范的类。在基于spring构建的应用程序中,它几乎没有任何痕迹表明使用了spring,最多就是使用了spring的注解。
举例清单1.1.1
pachage nui.honest.spring.demo.jopo;
@RestController
public class HelloWord {
@ReqestMapping("/hello")
public String test() {
return “hello world!”;
}
}
综上,就是spring在其实现时,尽量减少自身API对你编码的影响。
通过依赖注入和面向接口编程实现松耦合
使用依赖注入(DI)的原因:任何一个应用程序都是多个类相互协作来实现其功能的;按照传统做法,每个对象来管理与自己写作对象的应用实现,这样做耦合度高,可伸缩性差。
举例清单1.1.2:
pachage nui.honest.spring.demo.di;
/**
紧耦合的代码
/
public class NonDIDemo {
private RelationDemo relationDemo;
public NonDIDemo() {
this.relationDemo = new RelationDemo ();
}
public void test() {
relationDemo.test();
}
}
pachage nui.honest.spring.demo.di;
/
*
松耦合代码
/
public class NonDIDemo {
private RelationDemo relationDemo;
//构造器注入
public NonDIDemo(RelationDemo relationDemo) {
this.relationDemo =relationDemo;
}
//方法注入,一般使用set方法注入
public void setRelationDemo(RelationDemo relationDemo) {
this.relationDemo =relationDemo;
}
public void test() {
relationDemo.test();
}
}
其次,是使用实现接口和继承父类,实现面向对象的的多态:一个方法根据不同的实现有多种功能。
面向切面编程,就是把分散的功能分离出来形成可重用的组件。
举例清单1.1.3
package nui.honest.spring.demo.aop;
/
*

  • Created by 15692 on 2019/2/17.
    */
    public class Minstrel {

    public void singBeforeQuest() {
    System.out.println(“Quest before singing thing”);
    }

    public void singAfterQuest() {
    System.out.println(“Quest after singing thing”);
    }
    }
    配置文件
    在这里插入图片描述
    通过模板减少样版编码
    通过模板代码,就是简化代码,使得一个类或者方法只做一件事,减少上帝函数的出现,易于重复使用和扩展。
    举例清单1.1.3

package nui.honest.spring.demo.jdbc;
    import java.sql.*;
    import nui.honest.spring.demo.jdbc.vo.UserBeanVO;
    import org.springframework.stereotype.Component;
    import javax.jws.soap.SOAPBinding;
    /**
     *基于java的jdbc的数据库连接
     * Created by 15692 on 2019/2/17
     */
    @Component("jdbcTemplate")
    public class JDBCTemplate {
    
        public Connection getConn() {
            Connection conn = null;
            try {
                String URL = "jdbc:mysql://127.0.0.1:3306/springdemo?useUnicode=true&characterEncoding=utf-8";
                String USER = "root";
                String PASSWORD = "passwd";
                //1.加载驱动程序
                Class.forName("com.mysql.jdbc.Driver");
                //2.获得数据库链接
                conn = DriverManager.getConnection(URL, USER, PASSWORD);
    
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return conn;
        }
    
        public UserBeanVO getUser() {
    
            UserBeanVO userBeanVO = new UserBeanVO();
            Connection conn = null;
            Statement st = null;
            ResultSet rs = null;
            try {
                conn = getConn();
                //3.通过数据库的连接操作数据库,实现增删改查(使用Statement类)
                st = conn.createStatement();
                rs = st.executeQuery("select id,user_name as userName,user_passwd as userPasswd,creatime,remark from user");
                //4.处理数据库的返回结果(使用ResultSet类)
                while (rs.next()) {
                    userBeanVO.setId(rs.getInt("id"));
                    userBeanVO.setUserName(rs.getString("userName"));
                    userBeanVO.setUserPasswd(rs.getString("userPasswd"));
                    userBeanVO.setCreatime(rs.getDate("creatime"));
                    userBeanVO.setRemark(rs.getString("remark"));
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
    
                try {
                    if (null != conn) {
                        conn.close();
                    }
                    if (null != st) {
                        conn.close();
                    }
                    if (null != rs) {
                        rs.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            return userBeanVO;
        }
    }
package nui.honest.spring.demo.jdbc;

import nui.honest.spring.demo.jdbc.vo.UserBeanVO;
import nui.honest.spring.demo.jdbc.vo.UserRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.stereotype.Component;

/**
*基于spring的数据库查询
 * Created by 15692 on 2019/2/17.
 */
@Component
public class SpringTemplate {

    public JdbcTemplate getJdbcTemplate() {

        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/springdemo?useUnicode=true&characterEncoding=utf-8");
        dataSource.setUsername("root");
        dataSource.setPassword("passwd");

        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        return jdbcTemplate;
    }

    public UserBeanVO getUser() {
        UserBeanVO userBeanVO = null;
        JdbcTemplate jdbcTemplate = getJdbcTemplate();
        String sql = "select id,user_name as userName,user_passwd as userPasswd,creatime,remark from user";
        userBeanVO = jdbcTemplate.queryForObject(sql, new UserRowMapper());
        return userBeanVO;
    }
}

从清单可以看出,spring模块化的代码明显简便了很多,如果将 jdbcTemplate作为spring的配置,查询数据库的操作类将只做一件事。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值