杂谈:书接上回
通过使用struts、Mybatis、redis和JSP解决了很多的问题,但这是十几年前流行的解决的方法,到了现在,互联网飞速发展,WEB工程又遇到了诸多问题,那么新技术有帮我们解决了哪些问题呢?
业务篇 part2
1.当业务量剧增的时候,那些当初觉得可以接受的小点也逐渐变得不可忽视了,响应速度、安全、编写规范…等等方面随着业务量的激增而变得要求越来越严苛,面对庞大的业务量,很明显只靠基本的框架已经很难招架了,为了解决复杂的业务,让互联网应用能更上一层楼,EJB应运而生,EJB提供了一套相对而言可靠的商业框架,可以让商务开发得以发展,因为没有使用过,所以我对EJB的理解也不是很深,但作为一个重量级框架,它的诞生让B/S端有了更多的可能,更多的业务可以被放在服务器中为大家提供服务,相当于上会的那个白痴小玩偶穿上了复杂,正式的西装,摇身一变成了商业人士。
2.借用Spring in Action中的描述,Spring的诞生是为了反对EJB对Java开发工程师的折磨。它相比于EJB更加的轻量化,更简单易用,这点在SpringBoot中体现的淋漓尽致。EJB很棒,但是它是一个重量级框架,这时候程序员面对的问题就是那些复杂难以理解的API,对于程序员来说学习难度不是一般的大。这时Spring出现了,解救人们于水火之中。它提供了功能强大IOC、AOP及Web MVC等功能,除此之外像胶水一样可以与其他的架构紧密配合,例如我最开始学习的就是SSH,Spring+Hibernate+Struts,并用它完成了一个游戏交流网站。相对于EJB,Spring更像让小玩偶穿上一个一个轻便的工装,口袋里满满当当的工具,功能强大开发方便。
简单介绍一下IOC和AOP:
我个人理解,IOC控制反转是一种理念,就是将对组件的控制权移交,而DI,依赖注入则是IOC的一种实现方式,将强耦合的组件们保持其配合,但之间又不相互耦合。就像想让小玩偶售出货物,难道换一个货物就要重新编程一次?这显然是不对的,于是乎将将商品这个概念注入到售出的方法之中,可以注入其他具体的物品,然后售出,这样就是以DI的方式实现了IOC。
AOP,切面编程我则是这么理解的:小玩偶售出前后都要有一个像经理汇报,然后经理记录的动作,此时是需要将经理对象放入小玩偶的售出方法内吗?让小玩偶控制经理记录吗?这显然是不合理的,于是切面编程的作用,将小玩偶的售出方法切开,漏出发生前和发生后的两个切面,再将经理的记录动作加入到这两个时刻,完成整个售卖过程。(理解的不是很透彻,欢迎补充)
3.如果说Spring是一个装满工具的容器,假如你发现这个容器自带的功能比里面有些容器还好用,你会怎么办?丢掉Struts,换上SpringMVC。由于SpringMvc和Spring是完美搭配的,再加上SpringMVC开发起来快于Struts,再加上Struts2被曝出过有安全漏洞,导致SpringMVC后来居上,让SSM成为了当时主流的JavaWEB架构。
4.程序员们用着简单的SpringMVC时,本想着这下可以满足需求了,但是又有一部分的程序员觉得过多的配置文件打扰到他们写代码了,为了解决这个问题,SpringBoot出现了,Spring Boot实现了自动配置,降低了项目搭建的复杂度。相比于以前我写SSH架构的项目,SpringBoot简直是yyds。
这是我两年前刚学习时的配置代码:还有其他乱七八糟的就不放了
<?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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd"
xmlns:tx="http://www.springframework.org/schema/tx">
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:jdbc.properties</value>
</list>
</property>
</bean>
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="com.mysql.jdbc.Driver"></property>
<property name="url"
value="jdbc:mysql://localhost:3307/sshtest?useUnicode=true&characterEncoding=UTF-8">
</property>
<property name="username" value="root"></property>
<property name="password" value="13137582303"></property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/ssh/entity/TUser.hbm.xml</value>
<value>com/ssh/entity/Recom1.hbm.xml</value>
<value>com/ssh/entity/Msg.hbm.xml</value>
<value>com/ssh/entity/Msg2.hbm.xml</value>
<value>com/ssh/entity/Imgroom.hbm.xml</value>
</list>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="baseTransactionProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<!-- 指明进行事务管理业务方法名[*是通配符] -->
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="edit*">PROPAGATION_REQUIRED</prop>
<prop key="del*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<!-- 登录Action -->
<bean id="loginAction" class="com.ssh.action.LoginAction"
scope="singleton">
<property name="userService" ref="userService" />
</bean>
<!-- userDAO -->
<bean id="userDAO" class="com.ssh.dao.UserDAOImpl"
parent="daoTemplate" />
<bean id="userService" parent="baseTransactionProxy">
<property name="target">
<bean class="com.ssh.service.UserServiceImpl">
<property name="userDAO" ref="userDAO" />
</bean>
</property>
</bean>
<!-- dao -->
<bean id="baseDao" class="com.ssh.dao.BaseDAO">
<property name="sessionFactory">
<ref bean="sessionFactory"></ref>
</property>
</bean>
<bean id="userDaoImpl" class="com.ssh.dao.NewDaoImpl"
parent="baseDao"></bean>
<bean id="recomDaoImpl" class="com.ssh.dao.RecomDaoImpl"
parent="baseDao"></bean>
<bean id="msgDaoImpl" class="com.ssh.dao.MsgDaoImpl"
parent="baseDao"></bean>
<bean id="msgDaoImpl2" class="com.ssh.dao.MsgDaoImpl1"
parent="baseDao"></bean>
<!-- action -->
<bean id="validateAction" class="com.ssh.action.Regist">
<property name="userServiceImpl" ref="newServiceImpl"></property>
</bean>
<bean id="addRecomAction" class="com.ssh.action.RecomAction">
<property name="recomServiceImpl" ref="recomServiceImpl"></property>
</bean>
<bean id="addMsg" class="com.ssh.action.MsgAction">
<property name="msgDaoImpl" ref="msgServiceImpl"></property>
</bean>
<bean id="addMsg2" class="com.ssh.action.MsgAction2">
<property name="msgDaoImpl" ref="msgServiceImpl2"></property>
</bean>
<!-- service -->
<bean id="newServiceImpl" class="com.ssh.service.NewServiceImpl">
<property name="userDaoImpl" ref="userDaoImpl"></property>
</bean>
<bean id="recomServiceImpl"
class="com.ssh.service.RecomServiceImpl">
<property name="recomdaoImpl" ref="recomDaoImpl"></property>
</bean>
<bean id="msgServiceImpl" class="com.ssh.service.MsgServiceImpl">
<property name="msgDaoimpl" ref="msgDaoImpl"></property>
</bean>
<bean id="msgServiceImpl2" class="com.ssh.service.MsgServiceImpl2">
<property name="msgDaoimpl" ref="msgDaoImpl2"></property>
</bean>
<bean id="daoTemplate" abstract="true">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:annotation-driven
transaction-manager="transactionManager" />
</beans>
这是现在SpringBoot的:
server:
port: 8899
spring:
datasource:
url: jdbc:mysql://localhost:3307/shoeprotect?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useSSL=false&serverTimeZone=GMT%2B8
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
redis:
host: 127.0.0.1
port: 6379
database: 0
thymeleaf:
prefix:
classpath: /templates/
check-template-location: true
suffix: .html
encoding: UTF-8
servlet:
content-type: text/html
cache: false
mode: HTML
所以说懒惰才是科技进步的第一动力。