目录
页面技术
Spring框架
Spring的核心
Spring 的Bean中主要包含三种装配方式
(1)基于XML的装配
(2)基于Annotation的装配
(3)自动装配
Spring框架的优点如下
Spring框架包
SpringIOC应用示例核心代码
页面技术
JSP(web服务器端技术)、JSTL标签库、EL表达式、bootstrap页面模板(静态html、CSS、JS)
采用传统开发模式时,页面需要用到jsp技术(JSTL标签库、EL表达式)
前后端分离的开发模式,页面使用VUE框架,后端服务使用SSM或者是SpringBoot
Spring框架
在实际开发中,通常服务器端在采用分层方式进行架构。
三层体系架构,分别为表示层(Web层,包括控制层,使用SpringMVC框架)、业务逻辑层(Service,使用Spring框架)、持久层(数据访问层,Dao,使用Mybatis框架)
Spring对每一层都提供了技术支持。
Spring的核心
Spring的核心是控制反转(IoC: Inverse of Control )和面向切面编程(AOP: Aspect Oriented Programming )。
在使用Spring框架之后,对象的实例不再由调用者来创建,而是由Spring容器来创建,Spring容器会负责控制程序之间的关系,而不是由调用者的程序代码直接控制。
- IoC的全称是Inversion of Control,中文名称为控制反转。
控制反转就是指在使用Spring框架之后,对象的实例不再由调用者来创建,而是由Spring容器来创建,Spring容器会负责控制程序之间的关系,而不是由调用者的程序代码直接控制。这样,控制权由应用代码转移到了Spring容器,控制权发生了反转。 - DI的全称是Dependency Injection,中文称之为依赖注入。
它与控制反转(IoC)的含义相同,只不过这两个称呼是从两个角度描述的同一个概念。从Spring容器的角度来看,Spring容器负责将被依赖对象赋值给调用者的成员变量,这相当于为调用者注入了它依赖的实例,这就是Spring的依赖注入。
Spring 的Bean中主要包含三种装配方式
分别为基于XML的装配,基于Annotation的装配和自动装配,这三种装配方式的用法如下:
(1)基于XML的装配
Spring提供了2种基于XML的装配方式:设值注入(Setter Injection)和构造注入(Constructor Injection)。
一种是属性setter方法注入(或设值注入),另一种是构造方法注入。属性setter方法注入是指IoC容器使用setter方法来注入被依赖的实例。通过调用无参构造器或无参静态工厂方法实例化Bean后,调用该Bean的setter方法,即可实现基于setter方法的依赖注入。属性setter方法注入的必备条件如下:
- Bean类必须有一个无参构造方法
- Bean类必须为属性提供setter方法
- 在配置文件中,使用<property>元素来为每个属性注入值
设置注入中的Bean类必须提供一个默认的无参构造方法,同时必须为需要注入的属性提供对应的setter方法。使用设值注入时,在Spring配置文件中,需要使用<bean>元素的子元素<property>来为每个属性注入值。使用构造注入时,在配置文件里,需要使用<bean>元素的子元素<constructor-arg>来定义构造方法的参数,可以使用其value属性(或子元素)来设置该参数的值。
构造方法注入是指IoC容器使用构造方法来注入被依赖的实例。基于构造方法的依赖注入通过调用带参数的构造方法来实现,每个参数代表着一个依赖。要求必须满足如下条件:
- Bean类必须提供有参构造方法
- 配置文件中,使用<constructor-arg>元素来为参数注入值
(2)基于Annotation的装配
使用基于Annotation的装配时,首先需要使用@Repository、@Service与@Controller分别对实现类进行标注,然后用@Autowired或@Resource注解对注入的Bean的属性进行标注,最后在Spring的配置文件中,通过<context:annotation-config />来开启注解处理器,或使用<context:component-scan base-package="Bean所在的包路径"/>的配置方式即可实现Annotation的装配。
- @Controller通常作用在控制层,用于将控制层的类标识为Spring中的Bean。
- @Service通常作用在业务层,用于将业务层的类标识为Spring中的Bean。
- @Repository通常作用在数据持久层(或数据访问层,DAO层),用于将数据持久层的类标识为Spring中的Bean。
- @Autowired或@Resource注解对注入的Bean的属性进行标注,用于将实例化后对象注入到Bean的属性中,实现依赖注入。
(3)自动装配
在<bean>元素中使用autowire属性,并将其属性值设置为byName或者byType即可实现自动装配。
Spring框架的优点如下
(1)非侵入式设计:
Spring是一种非侵入式(non-invasive)框架,它可以使应用程序代码对框架的依赖最小化。
(2)方便解耦、简化开发:
Spring就是一个大工厂,可以将所有对象的创建和依赖关系的维护工作都交给Spring容器管理,大大的降低了组件之间的耦合性。
(3)支持AOP:
Spring提供了对AOP的支持,它允许将一些通用任务,如安全、事务、日志等进行集中式处理,从而提高了程序的复用性。
(4)支持声明式事务处理:
只需要通过配置就可以完成对事务的管理,而无需手动编程。
(5)方便程序的测试:
Spring提供了对Junit4的支持,可以通过注解方便的测试Spring程序。
(6)方便集成各种优秀框架:
Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持。
(7)降低了Java EE API的使用难度:
Spring对Java EE开发中非常难用的一些API(如:JDBC、JavaMail等),都提供了封装,使这些API应用难度大大降低。
Spring框架包
Spring开发所需的jar包分为两个部分: Spring框架4个核心基础包和一个第三方依赖包。
- spring-core-4.3.6.RELEASE.jar
包含Spring框架的核心工具类,Spring其它组件都要用到这个包里的类。
- spring-beans-4.3.6.RELEASE.jar
所有应用都要用到的JAR包,它包含访问配置文件、创建和管理Bean以及进行控制反转或者依赖注入操作相关的所有类。
- spring-context-4.3.6.RELEASE.jar
提供了在基础IoC功能上的扩展服务,还提供了许多企业级服务的支持
- spring-expression-4.3.6.RELEASE.jar
定义了Spring的表达式语言。
在使用Spring开发时,除了要使用自带的JAR包外,Spring的核心容器还需要依赖一个第三方包commons.logging的JAR包。
通常在Java项目中,通常会通过ClassPathXmlApplicationContext类来实例化ApplicationContext容器的方式,而在Web项目中,ApplicationContext容器的实例化工作会交由Web服务器来完成。
SpringIOC应用示例核心代码
main方法:
public class Test {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = (UserService) context.getBean("userService");
User user = new User();
user.setId("11111");
user.setName("zhangsan22222");
userService.addUser(user);
}
}
applicationContext.xml
<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-3.0.xsd">
<!--配置bean,配置后该类由spring管理-->
<bean id="userService" class="spring.ioc.service.UserService">
<!--依赖注入,配置当前类中相应的属性-->
<!-- <property>标签中的name就是UserService类中的userDao属性名,ref指下面<bean name="userDao"...>,这样其实是spring将UserDaoImp对象实例化并且调用UserService的setUserDao方法将UserDao注入 -->
<property name="userDao" ref="userDaoImp"></property>
</bean>
<!--配置bean,配置后该类由spring管理-->
<bean id="userDaoImp" class="spring.ioc.dao.imp.UserDaoImp"></bean>
</beans>
UserService.java
public class UserService {
public UserDao userDao;
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void addUser(User user) {
userDao.addUser(user);
}
}
UserDaoImp.java
public class UserDaoImp implements UserDao {
public void addUser(User user) {
System.out.println("添加了一个用户,姓名是" + user.getName() + user.getId());
}
}