學會這12個Java開發框架輕鬆拿到30K+

前言

Java 程序員方向太多,且不說移動開發、大數據、區塊鏈、人工智能這些,大部分 Java 程序員都是 Java Web/後端開發。html

那做爲一名 Java Web 開發程序員必須須要熟悉哪些框架呢?前端

今天,北遊給你們講解一下這15個通用的、必須掌握的框架,學會這些,多的不說,拿不到30K你把我頭錘爛!java

同時也給你們整理了一些不錯的資料,須要的話直接點擊領取就行了mysql

歡迎關注個人專欄一頭扎進Java,這個專欄會持續更新Java學習乾貨,期待一塊兒成長!jquery

好了,話很少說,坐穩扶好,發車嘍!git

1、Spring系列

這個不用多說吧,毫無疑問,Spring 框架如今是 Java 後端框架家族裏面最強大的一個,其擁有 IOC 和 AOP 兩大利器,大大簡化了軟件開發複雜性。而且,Spring 如今能與全部主流開發框架集成,可謂是一個萬能框架,Spring 讓 JAVA 開發變得更多簡單程序員

Spring 框架是一個分層架構,由 7 個定義良好的模塊組成。Spring 模塊構建在覈心容器之上,核心容器定義了建立、配置和管理 bean 的方式,如圖 1所示。github

學會這12個Java開發框架輕鬆拿到30K+

組成 Spring 框架的每一個模塊(或組件)均可以單獨存在,或者與其餘一個或多個模塊聯合實現。每一個模塊的功能以下:web

核心容器:                                                                                                   

核心容器提供 Spring 框架的基本功能。核心容器的主要組件是 BeanFactory,它是工廠模式的實現。BeanFactory 使用控制反轉 (IOC) 模式將應用程序的配置和依賴性規範與實際的應用程序代碼分開。面試

Spring上下文:                                                                                           

Spring 上下文是一個配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企業服務,例如 JNDI、EJB、電子郵件、國際化、校驗和調度功能。

Spring AOP:                                                                                             

經過配置管理特性,Spring AOP 模塊直接將面向方面的編程功能集成到了 Spring 框架中。因此,能夠很容易地使 Spring 框架管理的任何對象支持 AOP。Spring AOP 模塊爲基於 Spring 的應用程序中的對象提供了事務管理服務。經過使用 Spring AOP,不用依賴 EJB 組件,就能夠將聲明性事務管理集成到應用程序中。

Spring DAO:                                                                                             

JDBC DAO 抽象層提供了有意義的異常層次結構,可用該結構來管理異常處理和不一樣數據庫供應商拋出的錯誤消息。異常層次結構簡化了錯誤處理,而且極大地下降了須要編寫的異常代碼數量(例如打開和關閉鏈接)。Spring DAO 的面向 JDBC 的異常聽從通用的 DAO 異常層次結構。

Spring ORM:                                                                                             

Spring 框架插入了若干個 ORM 框架,從而提供了 ORM 的對象關係工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。全部這些都聽從 Spring 的通用事務和 DAO 異常層次結構。

Spring Web 模塊:                                                                                      

Web 上下文模塊創建在應用程序上下文模塊之上,爲基於 Web 的應用程序提供了上下文。因此,Spring 框架支持與 Jakarta Struts 的集成。Web 模塊還簡化了處理多部分請求以及將請求參數綁定到域對象的工做。

Spring MVC框架:                                                                                      

MVC 框架是一個全功能的構建 Web 應用程序的 MVC 實現。經過策略接口,MVC 框架變成爲高度可配置的,MVC 容納了大量視圖技術,其中包括 JSP、Velocity、Tiles、iText 和 POI。

實例化spring容器                                                           

2.1,新建一個web項目spring-demo

2.2,導入spring核心包

2.3,將applicationContext.xml文件導入src下,新建一個包com.spring.demo

2.4,導入JUnit,項目右鍵點擊properties---->java build path---->Libraries----->add library----->Junit4--->next--->finish

2.5,新建一個Junit Test Case類,

2.6,實例化容器,獲取applicationContext配置文件地址,建立ApplicationContext對象傳入獲取的配置地址,控制檯打印出實例化容器信息

2.7,控制檯打印出信息下面信息說明容器實例化成功

org.springframework.context.support.ClassPathXmlApplicationContext@3c1d332b: 
startup date [Wed Nov 09 16:23:19 CST 2016]; root of context hierarchy

利用Spring容器建立javaBean對象                                   

1,用構造器實例化                                                                                          

<beanid="calendarObj1"class="java.util.GregorianCalendar"></bean>

*1.2)TestCase調用getBean獲取配置文件bean,建立bean*對象實例

Calendar cr = ac.getBean("calendarObj1",Calendar.class);

看控制檯信息實例化成功

calendarObj1:java.util.GregorianCalendar[time=1478679801551,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2016,MONTH=10,WEEK_OF_YEAR=46,WEEK_OF_MONTH=2,DAY_OF_MONTH=9,DAY_OF_YEAR=314,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=4,HOUR_OF_DAY=16,MINUTE=23,SECOND=21,MILLISECOND=551,ZONE_OFFSET=28800000,DST_OFFSET=0]

2,使用靜態工廠方法實例化                                                                        

2.1) 在配置文件添加

<bean id="calendarObj2" class="java.util.GregorianCalendar" factory-method="getInstance"></bean>*

2.2) 在TestCase測試類test方法中添加

Calendar cr2 = ac.getBean("calendarObj2",Calendar.class);

       System.out.println("calendarObj2:"+cr2);

*2.3*看控制檯

calendarObj2:java.util.GregorianCalendar[time=1478679801586,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2016,MONTH=10,WEEK_OF_YEAR=46,WEEK_OF_MONTH=2,DAY_OF_MONTH=9,DAY_OF_YEAR=314,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=4,HOUR_OF_DAY=16,MINUTE=23,SECOND=21,MILLISECOND=586,ZONE_OFFSET=28800000,DST_OFFSET=0]

實例化成功

3,實例工廠實例化                                                                                      

3.1)在applicationContext.xml配置文件中添加

<!-- 實例工廠實例化 -->
        <bean id="calendarObj3" class="java.util.GregorianCalendar"></bean>
        <bean id="dateObj" factory-bean="calendarObj3" factory-method="getTime"></bean>

3.2)在測試類test方法增長

Date date = ac.getBean("dateObj",Date.class);

    System.out.println("calendarObj3:"+date);

 3.3 junit測試,控制輸出

calendarObj3:Wed Nov 09 16:23:21 CST 2016

實例化成功

容器的IOC應用                                                            

4.1)Set注入                                                                                             

經過調用無參構造器或者無參靜態工廠方法實例化bean以後調用該bean的set方法,便可實現set方式注入

4.1.1)在配置文件添加

<!-- 數據源setter注入 -->
<bean id="dataSource" class="com.spring.dao.JDBCDataSource">
<property name="driver" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8"></property>
<property name="username" value="root"></property>
<property name="password" value="">123456</property>
</bean>

4.1.2)寫JDBCDataSource類,這個類封裝了管理數據庫鏈接的方法getConnection(),在這個方法執行前須要數據庫鏈接參數:數據庫驅動,鏈接URL,用戶名和密碼,下面是JDBCDataSource代碼

package com.spring.dao;

import java.io.Serializable;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class JDBCDataSource implements Serializable{
    private static final long serialVersionUID = 1L;
    private String driver;
    private String url;
    private String username;
    private String password;
    public String getDriver() {
        return driver;
    }
    public void setDriver(String driver) {
        try{
            Class.forName(driver);
            this.driver = driver;
        }catch(Exception e){
            throw new RuntimeException(e);
        }
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    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;
    }
    public static long getSerialversionuid() {
        return serialVersionUID;
    }
    public Connection getConnection() throws SQLException{
        Connection cn = DriverManager.getConnection(url,username,password);
        return cn;
    }
    public void close(Connection cn){
        if(cn!=null){
            try{
                cn.close();
            }catch(SQLException e){
                e.printStackTrace();
            }
        }
    }
}

4.1.3)利用spring實現JDBCDataSource對象的建立,再使用set注入方式將數據庫參數注入給JDBCDataSource,這樣就能夠正常的調用getConnection()方法得到數據庫鏈接了。

4.1.4)TestCase測試鏈接方法

@Test
    public void testJDBCDataSource() throws SQLException{
        String conf = "applicationContext.xml";
        ApplicationContext ac = new ClassPathXmlApplicationContext(conf);
        JDBCDataSource jds = ac.getBean("dataSource",JDBCDataSource.class);
        Connection cn = jds.getConnection();
        System.out.println(cn);
    }

4.1.5)控制檯輸出

com.mysql.jdbc.JDBC4Connection@1a7244ca

說明已經得到數據庫鏈接了

4.2)利用構造器參數實現依賴屬性的注入                                                         

4.2.1)先建一個user表

CREATE TABLE `user` (
  `id` int(18) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) CHARACTER SET utf8 DEFAULT NULL,
  `phone` varchar(20) DEFAULT NULL,
  `password` varchar(50) CHARACTER SET utf8 DEFAULT NULL,
  `gender` varchar(10) CHARACTER SET utf8 DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;

4.2.2)建立user實體類

package com.spring.entity;

public class User {
    private String id;
    private String name;
    private String phone;
    private String password;
    private String gender;

    public User(String id, String name, String phone, String password,
            String gender) {
        super();
        this.id = id;
        this.name = name;
        this.phone = phone;
        this.password = password;
        this.gender = gender;
    }
    public User() {
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", phone=" + phone
                + ", password=" + password + ", gender=" + gender + "]";
    }
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((gender == null) ? 0 : gender.hashCode());
        result = prime * result + ((id == null) ? 0 : id.hashCode());
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        result = prime * result
                + ((password == null) ? 0 : password.hashCode());
        result = prime * result + ((phone == null) ? 0 : phone.hashCode());
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        User other = (User) obj;
        if (gender == null) {
            if (other.gender != null)
                return false;
        } else if (!gender.equals(other.gender))
            return false;
        if (id == null) {
            if (other.id != null)
                return false;
        } else if (!id.equals(other.id))
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        if (password == null) {
            if (other.password != null)
                return false;
        } else if (!password.equals(other.password))
            return false;
        if (phone == null) {
            if (other.phone != null)
                return false;
        } else if (!phone.equals(other.phone))
            return false;
        return true;
    }

}

4.2.3)建立接口UserDao,寫一個經過用戶名查詢用戶的方法findUserByName(String name)

package com.spring.dao;

import com.spring.entity.User;

public interface UserDao {
    public User findUserByName(String name);
}

4.2.4)建立MySqlUserDao實現UserDao,

package com.spring.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import com.spring.entity.User;

public class MysqlUserDao implements UserDao{

    private JDBCDataSource dataSource;

    public JDBCDataSource getDataSource() {
        return dataSource;
    }
    public void setDataSource(JDBCDataSource dataSource) {
        this.dataSource = dataSource;
    }

    public MysqlUserDao(JDBCDataSource dataSource) {
        super();
        this.dataSource = dataSource;
    }
    @Override
    public User findUserByName(String name) {
        // TODO Auto-generated method stub
        System.out.println("-----------查詢用戶信息-------------");
        String sql = "select * from user where name = ?";
        Connection con = null;
        try{
            String url = dataSource.getUrl();
            System.out.println(url);
            con = dataSource.getConnection();
            PreparedStatement ps = con.prepareStatement(sql);
            ps.setString(1, name);
            ResultSet rs = ps.executeQuery();
            User user = null;
            while(rs.next()){
                user = new User();
                user.setId(rs.getString("id"));
                user.setName(rs.getString("name"));
                user.setGender(rs.getString("gender"));
                user.setPassword(rs.getString("password"));
                user.setPhone(rs.getString("phone"));
            }
            rs.close();
            ps.close();
            return user;
        }catch(Exception e){
            e.printStackTrace();
            throw new RuntimeException(e);
        }finally{
            dataSource.close(con);
        }
    }

}

4.2.5)Spring支持利用構造器注入參數實例化bean方式,只要在配置文件增長構造器參數constructor-arg,Spring就會自動的調用有參的構造器建立bean對象實例。

<bean id="userDao" class="com.spring.dao.MysqlUserDao">
            <constructor-arg index="0" ref="dataSource"></constructor-arg>
        </bean>

4.2.6)在測試類寫個testFindUserByName方法

@Test
    public void testFindUserByName(){
        String con = "applicationContext.xml";
        ApplicationContext ac = new  ClassPathXmlApplicationContext(con);
        UserDao userDao = ac.getBean("userDao",UserDao.class);
        User user = userDao.findUserByName("lisi");
        System.out.println(user);

    }

4.2.7)控制檯正確輸出用戶信息說明構造器注入成功

User [id=2, name=lisi, phone=110, password=321654, gender=1]

4.2.8)失敗可能沒在mysqluserdao增長有參構造器

4.3.利用自動裝配實現自動屬性注入                                                                 

4.3.1)建立一個UserLoginService類,寫一個登陸方法login(),該方法依賴finfUserByName()方法

package com.spring.service;

import com.spring.dao.UserDao;
import com.spring.entity.User;

public class UserLoginService {
    private UserDao userDao;

    public UserDao getUserDao() {
        return userDao;
    }

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
    public User login(String name,String password){
        try{
            User user = userDao.findUserByName(name);
            if(user.getPassword().equals(password)){
                return user;
            }
            return null;
        }catch(Exception e){
            e.printStackTrace();
            return null;

        }

    }
}

4.3.2)autowire屬性有四種方式默認是no,(1).byName(2)byType,(3)constuctor,(4)autodetect,

學會這12個Java開發框架輕鬆拿到30K+

4.3.3)修改配置文件,添加配置

<!-- 自動裝配 -->
         <bean id="userLoginService" class="com.spring.service.UserLoginService" autowire="byName"></bean>

4.3.4)寫測試方法testUserLogin()

@Test
    public void testUserLogin(){
        String con = "applicationContext.xml";
        ApplicationContext ac = new ClassPathXmlApplicationContext(con);
        UserLoginService us = ac.getBean("userLoginService",UserLoginService.class);
        User user = us.login("lisi", "321654");
        System.out.println(user);
    }

4.3.5)控制檯輸出

 User [id=2, name=lisi, phone=110, password=321654, gender=1]

自動裝配說明成功


因爲篇幅所限後面提到的一些框架我就不一一展開講了,給你們貼一下官網地址和源碼地址,本身弄不明白的朋友能夠進羣領取一下相應框架學習筆記。

2、Mybatis/ iBatis

iBatis 曾是開源軟件組 Apache 推出的一種輕量級的對象關係映射持久層(ORM)框架,隨着開發團隊轉投Google Code 旗下,ibatis 3.x 正式改名爲 Mybatis,即:iBatis 2.x, MyBatis 3.x。

官網:

http://www.mybatis.org/mybatis-3/

源碼:

https://github.com/mybatis

3、Hibernate

Hibernate 是一個開放源代碼的對象關係映射框架,它對 JDBC 進行了很是輕量級的對象封裝,它將 POJO 與數據庫表創建映射關係,是一個全自動的 orm 框架。Hibernate 能夠自動生成 SQL 語句,自動執行,使得 Java 程序員能夠爲所欲爲的使用對象編程思惟來操做數據庫。

官網:

http://hibernate.org/

源碼:

https://github.com/hibernate

4、Dubbo

Dubbo是阿里巴巴開源的基於 Java 的高性能 RPC 分佈式服務框架,現已成爲 Apache 基金會孵化項目。使用 Dubbo 能夠將核心業務抽取出來,做爲獨立的服務,逐漸造成穩定的服務中心,可用於提升業務複用靈活擴展,使前端應用能更快速的響應多變的市場需求。

官網:

http://dubbo.apache.org

源碼:

https://github.com/apache/incubator-dubbo

5、Netty

Netty 是由 JBOSS 提供的一個開源的、異步的、基於事件驅動的網絡通訊框架,用 Netty 能夠快速開發高性能、高可靠性的網絡服務器和客戶端程序,Netty 簡化了網絡應用的編程開發過程,使開發網絡編程變得異常簡單。

官網:

https://netty.io/

源碼:

https://github.com/netty/netty

6、Shiro

Apache Shiro是一個強大而靈活的開源安全框架,它乾淨利落地處理身份認證,受權,企業會話管理和加密。

官網:

http://shiro.apache.org/

源碼:

https://github.com/apache/shiro

7、Ehcache

EhCache 是一個純Java的進程內緩存框架,具備快速、精幹等特色,是 Hibernate 中默認的CacheProvider。它使用的是 JVM 的堆內存,超過內存能夠設置緩存到磁盤,企業版的可使用 JVM 堆外的物理內存。

官網:

http://www.ehcache.org/

源碼:

https://github.com/ehcache/ehcache3

8、Quartz

Quartz 是一個基於 Java 的普遍使用的開源的任務調度框架,作過定時任務的沒有沒用過這個框架的吧?

官網:

http://www.quartz-scheduler.org/

源碼:

https://github.com/quartz-scheduler/quartz

9、Velocity

Velocity 是一個基於 Java 的模板引擎,簡單而強大的模板語言爲各類 Web 框架提供模板服務,來適配 MVC 模型。

官網:

http://velocity.apache.org/

源碼:

https://github.com/apache/velocity-engine

10、jQuery

jQuery是一個快速、簡潔的 JavaScript 框架,它封裝 JavaScript 經常使用的功能代碼,提供一種簡便的 JavaScript 設計模式,極大地簡化了 JavaScript 編程。

雖然很久沒作 Web 開發了,但哥也未曾忘記,也還記得一些經常使用的寫法,如:

$("#wx").html("javastack");

官網:

http://jquery.com/

源碼:

http://jquery.com/download/

11、JUnit

JUnit 是一個 Java 語言的單元測試框架,絕大多數 Java 的開發環境都已經集成了 JUnit 做爲其單元測試的工具。

官網:

https://junit.org

源碼:

https://github.com/junit-team/

12、Log4j

Log4j 是 Apache 的一個開源日誌框架,經過 Log4j 咱們能夠將程序中的日誌信息輸出到控制檯、文件等來記錄日誌。做爲一個最老牌的日誌框架,它如今的主流版本是 Log4j2。Log4j2是從新架構的一款日誌框架,拋棄了以前 Log4j 的不足,以及吸收了優秀日誌框架 Logback 的設計。

官網:

https://logging.apache.org/log4j/2.x/

源碼:

https://logging.apache.org/log4j/2.x/source-repository.html


好了,寫到這裏就差很少了,這些框架你都會用嗎?

不是吧,都看到這裏了也不點個贊加個關注嗎各位看官老爺?

往期熱文

end

相關文章
相關標籤/搜索