简述基于JavaEE企业级开发技术(Spring)(1) | 您所在的位置:网站首页 › javaee是java吗 › 简述基于JavaEE企业级开发技术(Spring)(1) |
一、绪论
1、学习内容
javaEE企业开发技术概述javaEE容器——SpringORM数据层——MyBatis/JPAWeb层——Spring MVC展现层——JSP/Thymeleaf整合框架——SSM/SSH用户模块分析用户模块+功能模块设计
前端框架:Bootstrap,NodeJS,Vue/React/Angular 2、WEB端开发发展历程(java) CGI——每次请求产生一个进程,重量级。Servlet——每次请求产生一个线程,轻量级。控制逻辑、页面表现、业务逻辑全部混在一起,前端设计无法介入 JSP——编译成Servlet,在HTML中嵌入java代码。前端开发人员可以进行较独立的设计和修改Model1——JSP+Bean 业务java代码封装到bean中 通过标签获取/创建javabean JSP负责页面表现和控制逻辑 Javabean负责业务逻辑Model2——Web MVC M——Model,模型(业务模型),即Web应用中的数据及对数据的处理,页面要显示的数据,页面要提交的数据,实体数据。还包括对数据的管理和维护。可进一步分层 V——View,视图,即web页面,对模型的展现 C——Controller,控制逻辑,接收用户请求转发给相应的模型进行处理,把模型处理结果返回给对应的视图进行展现。 3、JavaEE应用的特点JavaEE是一套使用Java进行企业级Web应用开发的大家一致遵循的工业标准。 以上是windows,若为mac: /usr/local/repo ali * ali maven repo http://maven.aliyun.com/nexus/content/groups/public maven-default-http-blocker external:http:* Pseudo repository to mirror external repositories initially using HTTP. http://0.0.0.0/ true (4)配置IDEA的maven设置:点击File->Settings菜单,搜maven![]() ![]() ![]() ![]() ![]() ![]() ![]() Spring是什么: 一个复杂而又简洁的javabean工厂Spring是一种轻量级的、非侵入式的Java/JavaEE应用框架管理bean的创建和管理bean 的依赖Spring优点: Spring的DI容器,提高组件之间的解耦SpringAOP提供通用任务的集中统一处理(安全、事务、日志等),实现更好的代码复用 2、IOC与DI由容器来管理对象之间的依赖关系(而不是对象本身来管理),就叫“控制反转”或“依赖注入” Bean容器框架的基本思想就是IOC/DI IOC(Inversion of Control):由容器来负责控制对象的生命周期和对象间的关系(一种减少类与类之间依赖的设计原则) DI(Dependency Injection):在系统运行中,由容器动态的向某个对象提供它所需要的其他对象 Spring就是一个IOC容器 IOC与DI,说的是一回事,但DI这个名词更能表达这种设计模式的思想 3、DI的两种方式(1)设值注入 IOC容器使用属性的setter方法来注入被依赖的实例 (2)构造注入 IOC容器使用构造器来注入被依赖的实例 用index属性指定顺序,从0开始 4、两种注入方式对比(1)设值注入的优点: 对于复杂依赖关系,如采用构造注入,导致构造器过于臃肿,spring在创建bean对象的同时,要同时实例化其依赖的其他所有实例对象,导致性能下降对于某些属性可选的情况,多参数构造器更加复杂。(2)构造注入的优点 如果依赖对注入顺序有要求,则可以在构造器中决定依赖关系的注入顺序对依赖关系无须变化的bean使用构造注入,组件内部的依赖关系对于组件调用者完全透明,更符合高内聚原则。设值注入为主,构造注入为辅 三、Spring配置管理 1、XML标记语言: (1)Html(非严格,容错) (2)Xml(可扩展标记语言,严格定义,格式良好的) org.springframework.beans.factory.BeanFactory是Spring IoC容器的实际代表者,IoC容器负责容纳bean,并对bean进行管理。 使用XML作为配置元数据的描述格式,对那些我们希望通过Spring IoC容器管理的bean进行定义。 ApplicationContext是BeanFactory的扩展,功能得到了进一步增强,比如更易与Spring AOP集成、消息资源处理(国际化处理)、事件传递及各种不同应用层的context实现(如针对web应用的WebApplicationContext)。 ApplicationContext可利用 ContextLoader在 Web应用启动的时候 自动创建 (SSH整合的时候 就是采用这种方式 ) 创建 ApplicationContext容器时 ,所有 singleton bean将会被 预初始化 。 3、Spring包依赖
各组件的相互引用实质上就是依赖关系,可以通过Spring的IOC容器完成依赖注入。 (1)设值注入 在需要配置依赖的组件对应的元素中配置子元素,指定要注入的属性的名字和值 (2)构造注入 在需要配置依赖的组件对应的元素中配置子元素,按构造函数参数顺序指定对应要注入值 依赖关系的值可以是一个确定的常量,也可以是容器中其他bean的引用 通常对于普通属性的值不纳入配置管理,主要是配置bean实例之间的依赖关系 一般依赖配置分四种情况 (1)注入普通属性 (2)注入bean引用 (3)注入嵌套bean (4)注入集合类型值 (1)注入普通属性 (3)使用自动装配注入bean引用 设定bean元素的autowire属性 no:(默认值)不使用 自动装配,须显示指定refbyName:根据名字自动装配,在容器中找到id属性与需要注入的属性(setter方法的名字)同名的bean完成注入byType:根据类型匹配自动装配constructor:与byType类似autodetect:根据bean内部结构决定用constuctor还是byType
(5)注入集合值 在property元素中使用子元素分别这是List、Set、Map、Properties集合属性值 (3)协调作用域不同步的bean √ Singleton bean依赖Singleton bean √ Prototype bean依赖Prototype bean √ Prototype bean依赖Singleton bean X Singleton bean依赖Prototype bean 不同步的根源: Singleton bean只被初始化一次,多次请求获取同一个共享对象; Prototype bean每次请求都应重新创建。 解决方案 放弃容器注入,singleton bean每次使用prototype bean时主动从服务器请求新的prototype bean。耦合了SpringAPI 利用方法注入:使用lookup方法注入 public abstract Axe getAxe(); public void useAxe() { System.out.println("正在使用 " + getAxe()+ "砍柴!"); System.out.println(getAxe().chop()); } 9、JavaEE中的设计模式 工厂模式单例模式代理模式(用户代码不直接调用目标对象的方法,通过代理对象调用)静态代理:定义实现代理类动态代理:动态生成代理类 JDK反射与动态代理 CGLib动态代理 10、静态代理(编码实现代理对象)
通过类的签名创建对象 通过方法的签名调用方法
目的:消灭Bean的xml配置(大幅减少) 做法:代码标记,自动扫描 在Bean的定义文件中添加注解@容器启动时自动扫描 context:component-scan
(1)context:component-scan beans中引入context命名空间/XSD 配置< context:component-scan base-package=“….”/> (2)Bean的配置:在类定义语句前注解 @Component (“beanName”):将注解类的对象加入容器,id为beanName。beanName缺省时为类名(首字母小写) @Bean@Service@Repository@Scope(“scope”):指定对象在容器中的作用域,无该注解时默认为singleton (3)依赖的配置 @Autowired:Spring的注解,在属性定于语句或setter方法前注解,将容器中匹配的对象自动注入,默认是byType方式。如果需要采用byName方式,可以通过添加@Qulifier(“name”)的方式指定@Resource:JSR-250标准注解,与@Autowried类似,默认是byName方式。如果要采用byType方式可以添加type参数,如@Resource(type=com.test.ExampleBean)(4)值的注入(结合properties文件配置): resource目录下创建values.properties文件,填写key-value 在spring配置文件中: @Value(“value”):在属性定义语句前注解,给对应属性注入常量值 @Value(“${propKey:defaultValue}”):给属性注入属性文件文件中propKey对应的值,如果propKey不存在,就注入defaultValue (5)生命周期 @PostConstruct:在类的成员方法定义语句前注解,注解的方法将会在对象完成构造且依赖注入完成后被自动调用对象初始化的钩子函数 @PreDestroy:在类的成员定于语句前注解,注解的方法将在bean对象销毁之前被自动调用对象销毁的钩子函数 16、Java日志配置拥抱log4j,抛弃System.out.println (1)在resources目录下新建log4j.properties (2)在pom.xml中添加依赖包 (3)为类添加logger静态属性 (4)在方法中用logger输出日志 logger.debuglogger.infologger.warnlogger.errorlogger.fetal org.slf4j slf4j-api 1.7.25 org.slf4j slf4j-log4j12 1.7.25 log4j log4j 1.2.17log4j.properties: JUnit:Java语言的单元测试框架 默认添加到生成的模板项目中:版本改到4.12以上 在任意方法前加@Test注解都可测试。实际应用中测试用例与项目代码完全分离,一般scope限定为test 在test/java下的包中添加测试类,在测试方法前添加@Test注解 18、Spring测试(测试容器中的bean)在pom中添加sprint-test依赖 |
CopyRight 2018-2019 实验室设备网 版权所有 |