JavaEE 应用分类
- 前端层(HTIL 5、CSS 3、jQuery、 Bootstrap、Angular、 Vue、 React)
- MVC层(Spring MVC、Struts 2)
- 中间层(Spring)
- 持久层(IlyBatis、 JPA/Hibernate、 Spring Data)
三种解决方式
-
A组件先通过new创建B组件、再调用B组件的方法。 缺点:非常明显。A组件需要真接通过new创建B组件,因此A组件与B组件的实现类耦合, . 当B组件需要升级、替换时,A组件的代码也需要随之修改。造成“牵- -发而动全身”的修改效果。
-
A组件先通过B组件工厂 获取B组件,再调用B组件的方法。 优点: A组件与B组件的实现类是完全分离的,当B组件需要升级、替换时,A组件的代码无需修改。因此这种修改就被限制在B组件这一层、不会向上扩散。”缺点:编程更复杂,程序需要额外维护- -个工厂类。
-
A、B两个组件都由“容器”管理,“容器”先将B组件传给A组件, A组件直接调用B的方法。这样,A组件就不需要主动去获取B组件。此时,容器就相当于巨大的工厂。这种模式就叫IoC (Inverse of Control)|
事务管理
Java EE 应用的中间层分成 Service 和 DAO .
一个组件存在2个或2个以上的维度辩护(1.业务逻辑经常需要变化 2.持久层可能需要改变应该考虑把组件分离2个类铸件 ——Service 负责项目业务逻辑变化 (应该是业务操作的实现,在DAO上面事务控制是没有意义的 ——DAO 负责项目持久层改变 (事务代码必须用持久陈来操作
分层是因为DAO说负责所有持久层技术改变,持久层的改变不会音响Service组件
Spring的两大核心机制 IOC和AOP。
-
Bean 配置时,如果配置类没有午餐构造,系统会自动添加应该无参构造 <bean.../>驱动spring通过反射class属性来创建对象,并注入spring容器 <property...>驱动spring执行set方法 其中name绝对调用哪一个setter value是调用name时的方法注入的值
容器中的id大小写都要一样
-
创建spring容器 (装一切的Bean) ApplicationContext(spring上下文)
调用bean工厂
public class SpringTest{
public static void main(String[] args){
//
UserService us = new UserService() ;
//
us. addUser ("李刚",25) ; .
ApplicationContext ctx = new ClassPathXmlAppl icat ionContext (""beans. xml");
Date date = (Date)ctx.getBean("myDate");//强制转换类
userService userService = ctx.getBean("userService",userService.class);
}
}
<bean id="mydate" class="java.util.Date"/>
<bean id="userSErvice" class="com.example.ssm.day1.UserService">
<property name="userDao" ref="userDao"/>
</bean>
<bean id="userDao" class="com.example.ssm.day1.UserDaoSenior"/>
//Bean里面,class不能位接口,只能时类
<constructor-arg>
如果构造函数里面时标量,用value= "(值)" type = "(类型)" index = "(参数索引)"
如果时应用容器里面其他的Bean,用ref
<constructor-arg/>
因为在IDEA里面,把xml文件放在java文件里面,spring会报错xml文件不存在 需要在pom文件中添加这段代码。(一般时放在resources里面),但自己为方便学习spring和区分,所以放在专属的包里面
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>