Spring _day01_下载、概述、监听器
- Spring:SE/EE开发的一站式框架。
。一站式框架:有EE开发的每一层解决方案。
。 WEB层 :SpringMVC
。 Service层 :Spring的Bean管理,Spring声明式事务
。 DAO层 :Spring的Jdbc模板,Spring的ORM模块l Spring:SE/EE开发的一站式框架。
- 概念:【面试】
IoC: 控制反转:将对象的创建权反转给(交给)Spring
DI:依赖注入,前提是要有IoC的环境,Spring管理这个类的的时候将类的依赖属性注入(设置)进来
【总而言之:IoC是把类交给Spring管理,DI是给这个类的属性赋值】
AOP:
Spring官网:spring.io
传统方式程序开发遇到的问题:
面向接口编程,可以用到面向对象的多态特性,方便程序的拓展,不好的是接口和实现类之间有耦合,联系过紧。切换底层实现的时候,要修改源代码。
好的设计模式,尽量满足OCP原则,在尽量不修改源代码的基础上对程序进行拓展。
工厂模式是一个很好的解决方案, 虽然接口和 实现类之间没有耦合,但是工厂和接口之间有耦合。一旦接口发生变动,就要对工厂进行更改。如此一来,又造成对代码的大幅度修改。
解决方案:工厂+反射+配置文件来实现程序解耦和
1、开发准备
1.1spring的开发包目录说明
docs :Spring的开发规范和API
libs :Spring的开发的jar和源码
schema :Spring的配置文件的约束
1.2开发最基础的jar包
spring-beans-4.2.4.RELEASE.jar
spring-context-4.2.4.RELEASE.jar
spring-core-4.2.4.RELEASE.jar
spring-expression-4.2.4.RELEASE.jar
在开发过程中需要记录日志,还需要一个日志记录包:
位于依赖库中 :com.springsource.org.apache.commons.logging-1.1.1
jarapache提供了一个接口规范,具体实现的还是log4j:
com.springsource.org.apache.log4j-1.2.15.jar
1.3入门程序
建项目(web或java项目均可),导包~
编写配置文件:
<!--引入约束:spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html-->
<!--xsd-configuration.html-->
<?xml version="1.0" encoding="UTF-8"?>
<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.xsd">
<bean id="userdao" class="com.simon.spring.dao.Impl.UserDaoImpl">
<property name="name" value="Simon"></property>
</bean>
</beans>
UserDao接口:
package com.simon.spring.dao;
public interface UserDao {
public void init();
}
UserDaoImpl:
package com.simon.spring.dao.Impl;
import com.simon.spring.dao.UserDao;
public class UserDaoImpl implements UserDao {
String name ;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public void init() {
System.out.println("userdao is initing。。。"+name);
}
}
在service中测试:
package com.simon.spring.service;
import com.simon.spring.dao.UserDao;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class UserService {
@Test
public void test(){
ApplicationContext applicationContext =
new ClassPathXmlApplicationContext("config/applicationContext.xml");
UserDao userdao =(UserDao)applicationContext.getBean("userdao");
userdao.init();
}
}
2、Spring的工厂类
2.1BeanFactory : 老版本的工厂类
它在调用getBean的时候才会生成实例
2.2 ApplicationContext :新版本的工厂类
实现BeanFactory,它还有两个实现类 :
FileSystemXmlApplicationContext :加载文件系统中的配置文件
ClassPathXmlApplicationContext : 加载类路径下的配置文件
它在加载配置文件的时候,就会把配置文件中管理的类给实例化出来
3、Bean的相关配置
3.1 bean 标签中的id和name有什么区别 【了解】
id : 使用了唯一约束,里面不能出现特殊字符
name : 理论上可以重复出现,实际开发中不可以重复。可以出现特殊字符。【在与struts1整合的时候会用】
3.2 bean的生命周期的配置 【了解】
先修改配置文件:
<bean id="userdao" class="com.simon.spring.dao.Impl.UserDaoImpl" init-method="setup" destroy-method="destroy">
<property name="name" value="Simon"></property>
</bean>
在UserDaoImpl类中添加这两个方法:
public void setup(){
System.out.println("这是setup方法。。。");
}
public void destroy(){
System.out.println("这是destroy方法。。。");
}
工厂被销毁的时候,才会执行销毁方法,在测试类中添加 :
((ClassPathXmlApplicationContext) applicationContext).close(); //bean是单例的
3.3 bean的作用范围的配置【重点】
scope :代表Bean的作用范围:
singleton :默认的,Spring 会采用单例模式创建这个对象。
prototype :多例模式。(Struts2和Spring整合一定会用到)
request :应用在web项目中,Spring创建这个类以后,将这个类存入到request范围中。
session :应用在web项目中,Spring创建这个类以后,将这个类存入到session范围中。
globalsession :应用在web项目中,必须在porlet环境下使用。但是如果没有这种环境,相对于session。
4、Spring的属性注入
Spring支持前两种三种办法:
4.1 有参构造方法的方式
编写实体类User ,属性为 name,age,sex ,提供有参和无参构造,修改配置文件如下 ,自行测试
<bean id="user" class="com.simon.spring.domain.User">
<constructor-arg name="name" value="Simon"></constructor-arg>
<constructor-arg name="sex" value="男"></constructor-arg>
<constructor-arg name="age" value="19"></constructor-arg>
</bean>
4.2 set方法的方式
编写实体类User ,属性为 name,age,sex ,提供set方法,修改配置文件如下,自行测试
<bean id="user2" class="com.simon.spring.domain.User2">
<property name="name" value="Simon"></property>
<property name="sex" value="男"></property>
<property name="age" value="19"></property>
</bean>
4.3 set方法注入对象类型的属性
Simon的属性中添加他的好朋友 Lucy lucy 修改配置文件 如下,对象类型注入用ref 自行测试
<!--引用类型注入的测试-->
<bean id="simon" class="com.simon.spring.domain.Simon">
<property name="name" value="Simon"></property>
<property name="sex" value="男"></property>
<property name="age" value="19"></property>
<property name="lucy" ref="lucy"></property>
</bean>
<bean id="lucy" class="com.simon.spring.domain.Lucy">
<property name="name" value="Lucy"></property>
<property name="sex" value="女"></property>
<property name="age" value="19"></property>
</bean>
4.4 P名称空间的注入方式(Spring 2.5 之后)
通过引入P名称空间完成属性的注入:
写法:
普通属性 p:属性名 = ”值“
对象属性 p:属性名-ref="值"
4.4.1具体用法:
在头文件中加入:
xmlns:p="http://www.springframework.org/schema/p"
使用P名称空间:自行测试
<bean id="simon2" class="com.simon.spring.domain.Simon"
p:name="simon2" p:age="19" p:lucy-ref="lucy"></bean>
4.5 SpEL的属性注入(Spring 3.0之后的版本)
Spring 的表达语言,特点是灵活:Spring Expression Language 语法 #{SpEL}
<bean id="simon3" class="com.simon.spring.domain.Simon">
<property name="name" value="#{lucy.getName()}"></property>
<property name="sex" value="#{lucy.getSex()}"></property>
<property name="age" value="#{lucy.getAge()}"></property>
<property name="lucy" value="#{lucy}"></property>
</bean>
4.6 接口注入的方式
4.7 集合属性的注入
<bean id="collection" class="com.simon.spring.arr.CollectionDemo">
<!--数组类型的注入-->
<property name="str">
<list>
<value>simon</value>
<value>lucy</value>
<value>miki</value>
</list>
</property>
<!--List集合类型的注入-->
<property name="list">
<list>
<value>凤姐</value>
<value>如花</value>
<value>翠花</value>
</list>
</property>
<!--Set集合的注入-->
<property name="setArr">
<set>
<value>如花</value>
<value>凤姐</value>
<value>翠花</value>
</set>
</property>
<!--Map集合的注入-->
<property name="map">
<map>
<entry key="1" value="a"></entry>
<entry key="2" value="b"></entry>
<entry key="3" value="c"></entry>
</map>
</property>
</bean>
5、spring的分模块开发
5.1在加载配置文件的时候,加载多个配置文件
ApplicationContext applicationContext =new ClassPathXmlApplicationContext("config/applicationContext.xml, config/applicationContext2.xml");
5.2在一个配置文件中引入多个配置文件
<import resource="applicationContext2.xml" />
Spring _day01_下载、概述、监听器的更多相关文章
- 2017/4/27-Gradle的配置与Spring的下载
Gradle的配置与Spring的下载 1.Gradle 1) 介绍 Gradle是一个基于Groovy的构建工具,类似Maven,但是比其更加简单轻便.它可以自动化地进行软件构建.测试.发布.部署. ...
- spring原理案例-基本项目搭建 01 spring framework 下载 官网下载spring jar包
下载spring http://spring.io/ 最重要是在特征下面的这段话,需要注意: All avaible features and modules are described in the ...
- 214. Spring Security:概述
前言 在之前介绍过了Shiro之后,有好多粉丝问SpringSecurity在Spring Boot中怎么集成.这个系列我们就和大家分享下有关这方面的知识. 本节大纲 一.什么是SpringSecur ...
- [转]spring 官方下载地址(Spring Framework 3.2.x&Spring Framework 4.0.x)
SPRING官方网站改版后,建议都是通过 Maven和Gradle下载,对不使用Maven和Gradle开发项目的,下载就非常麻烦,下给出Spring Framework jar官方直接下载路径: h ...
- spring框架的概述与入门
1. Spring框架的概述 * Spring是一个开源框架 * Spring是于2003 年兴起的一个轻量级的Java开发框架,由Rod Johnson在其著作Expert One-On-One J ...
- Spring官方下载地址
改版后的Spring官方网站下载地址找不到了,汗~~ 可以通过该链接下载对应的包:http://repo.spring.io/milestone/org/springframework/ Spring ...
- Spring jar 下载地址
Spring jar 下载地址 http://repo.springsource.org/libs-release-local/org/springframework/spring/
- spring 中国下载点
http://repo.spring.io/libs-release-local/org/springframework/spring/ spring 中国下载点
- Spring 框架的概述以及Spring中基于XML的IOC配置
Spring 框架的概述以及Spring中基于XML的IOC配置 一.简介 Spring的两大核心:IOC(DI)与AOP,IOC是反转控制,DI依赖注入 特点:轻量级.依赖注入.面向切面编程.容器. ...
随机推荐
- deno深入揭秘及未来展望
deno node.js之父Ryan Dahl在一个月前发起了名为deno的项目,项目的初衷是打造一个基于v8引擎的安全的TypeScript运行时,同时实现HTML5的基础API.所谓的安全运行时, ...
- [c/c++] programming之路(29)、阶段答疑
一.指针不等于地址 指针不仅有地址,还有类型,是一个存储了地址的变量,可以改变指向:而地址是一个常量 #include<stdio.h> #include<stdlib.h> ...
- android源码编译出现No private recovery resources for TARGET_DEVICE解决方法
mmm或mm出现以下提示的解决方法:Terminal log:No private recovery resources for TARGET_DEVICE xxxxxxmake: Entering ...
- 2019.04.16打卡(java 数组)
1. 要求输出数组中数据的平均值,并输出所有大于平均值的数据 代码 package block; import java.util.*; public class Average { public ...
- Pycharm在运行过程中,查看每个变量的方法(show variables)跟终端一样显示变量
点击运行栏的这个灰色向下剪头: 在出现的窗口上,勾选上: 点击OK,重启Pycharm:接着点击Run窗口: 将Run的show variables图标勾选: 然后你就会发现,在右边出现了变量的窗口:
- 迁移python project
1.从python官网下载同版本的安装版的python,在新机器上安装同样版本的python(python底层是用C语言写的,安装python会安装c c++用到的库) 2.拷贝united1整个文 ...
- python笔记---@classmethod @staticmethod
python定义类方法的三种方式: 1.常规方式--需要通过self参数隐式的传递当前类对象的实例 2.@classmethod修饰方式--@classmethod修饰的方法class_foo()需要 ...
- 算法笔记--manacher算法
参考:https://www.cnblogs.com/grandyang/p/4475985.html#undefined 模板: ; int p[N]; string manacher(string ...
- Spring Cloud 升级最新 Finchley 版本,踩了所有的坑!
Spring Boot 2.x 已经发布了很久,现在 Spring Cloud 也发布了 基于 Spring Boot 2.x 的 Finchley 版本,现在一起为项目做一次整体框架升级. 升级前 ...
- zoj2930
各点向S连推迟的花费,向T连提前的花费,S表示提前,T表示推迟.a推迟b也推迟b往a连INF.最小割后从各点出发,能直接或间接到T的就是必须推迟的,剩下的就是能提前的. #include < ...