Spring基础内容
来源:互联网 发布:上海狮翼网络 编辑:程序博客网 时间:2024/06/03 18:01
1.Spring是什么?
Spring就是用来解决对象的创建和对象之间的依赖关系的 这样一门技术。
Spring能干什么?
1>:创建对象
2>:依赖关系
3>:为service提供事务
4>:整合我们的传统开发框架
2.事务:
1>:粗粒度事务
只能够对方法进行添加事务 这种称为粗粒度事务(Spring的事务只能够是粗粒度的事务)
以后我们在给访问数据库添加事务的时候是不会将事务写到dao层上的, 因为一个动作是否完成取决于业务逻辑是否完成 ,所以事物都是添加在service上的
2>:细粒度事务
就是一个事务能够对我们的程序的某几行提供的事务
3>:事务的分类
1>:本地事务
就是只是对一个数据库添加的事务, 我们目前学习的都叫本地的事物
2>:全局事务
举例:银行转账 --中国银行给建设银行转钱 。 这个是两个不同的数据库 ,要同时保证在这两 个表中的操作能够顺利的进行,就必须要使用全局事务
3.Spring的模块图(7个)
1.Spring AOP模块
AOP:面向切面的编程
就是将重复代码抽取出来形成切面类 ,然后当我们程序运行的时候,通过 动态代理或者cglib代理来完成代码的自动植入 的这样一个编程思想 就叫做面向切面的编程
2.Spring ORM模块
主要是提供了对Hibernate/MyBatis/JDO其他ORM框架整合的支持(对象关系映射)
3.Spring DAO模块
这个模块实际上是 Spring提供的一个dao层的解决方案(dbutils这种)
4.Spring WEB模块
这个是Spring提供的对web的支持
5.Spring Context模块
Spring提供的一个对上下文的支持
6.Spring WEB MVC模块
这个模块实际上就是传说中的 Spring MVC
7.Spring Core模块
在我们的Spring中提供了两个思想: IOC / DI
IOC----->表示的是控制反转(inversion of control)
DI ----->依赖注入 (dependcy injecte)
反转的是什么?
1>:以前我们在使用MVC模式来进行开发的时候 service对象是谁创建的?dao对象是谁创建的? 以前我们要使用这个任意类的对象 --->自己通过程序去new一个
2>:学习了IOC之后那么以后我们的对象的创建就不是我们去完成了,而是由Spring的IOC容器去完成
那么反转的是什么? 反转的是创建对象的这个权利-----------以前我们自己创建,现在Spring的IOC容器去给我们创建;
具体控制的是什么? 控制的是创建对象。
依赖注入:注入的是什么?
依赖表示的是什么意思?谁依赖谁?
谁依赖谁? 最经典的:controll依赖于service ,service依赖于dao
依赖注入? 注入的是什么? 注入的是 对象 还有 普通的资源(字符串/boolean/int/float/double)
控制反转和依赖注入的核心功能包就是:Spring core模块完成的功能
4.使用Spring编写一个HelloWorld程序
1>: 编写程序的第一步:百度下载jar包 spring-framework-4.3.7.RELEASE-dist.jar
2>:在工程中导入这个包
commons-logging-1.1.3.jar --->依赖包 日志相关包,是用来辅助运行的
spring-beans-4.3.7.RELEASE.jar --->实体生成对象的包
spring-context-4.3.7.RELEASE.jar --->上下文相关包
spring-core-4.3.7.RELEASE.jar --->核心功能包
spring-expression-4.3.7.RELEASE.jar --->表达式相关的包
3>:在我们的src目录下 新建一个文件这个文件的名字是 ApplicationContext.xml这个文件(名字呢实际上是可以随便写)/bean.xml
<?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"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd">
<!--自动生成对象-->
<bean class="com.qf.helloword.User"></bean>
</beans>
4>:配置我们约束
在我们的下载包里面去找spring的配置文件 打开htmlsingle -->xmlns:p 找个长的 copy过来将bean中的所有的东西删除
5>:使用API获取这个对象
第一种模式
public void test() throws Exception {//有两种模式来获取这个JAVA对象//第一种 通过工厂模式来获取JAVA对象//框架默认的路径就在src下ClassPathResource resource=new ClassPathResource("bean.xml");//获取这个工厂XmlBeanFactory factory=new XmlBeanFactory(resource);//第三步:获取这个JAVA对象User user=(User) factory.getBean("user_01");System.out.println(user);}
第二种模式
public void test2() throws Exception {ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("bean.xml");//第三步:获取这个JAVA对象User user=(User) context.getBean("user_01");System.out.println(user);}
5.Spring的IOC/DI配置文件
现在这个对象默认是没有构造函数/没有说明到底是单例的与否....
1>:默认情况下 生成的JAVA对象是单例的
配置:
自动生成对象:
scope="prototype":这个就表示的是多例的
scope="singleton":这个表示的是单例的
lazy-init:表示的是是否延迟创建对象 ,这个只是对单例有效 ,如果不延迟创建那么在web工程中启动工程就会自动创建 ,如果延迟那么表示的是使用的时候才创建对象
destroy-method="destoryBobo":销毁方法
init-method="initBobo":初始化方法
<bean class="com.qf.helloword.User"scope="singleton" lazy-init="false" init-method="initBobo" destroy-method="destoryBobo"></bean>
假设我想给我们的对象赋值 怎么办?
调用有参数的构造器<bean class="com.qf.helloword.User"><!--这个表示调用的是有多个参数的构造器
index:表示的是参数的下标 value代表的是这个值--><!-- <constructor-arg index="0" value="中国"></constructor-arg><constructor-arg index="1" value="美国"></constructor-arg> --><!-- <constructor-arg name="userName" value="西瓜瓜"></constructor-arg><constructor-arg name="userPassword" value="123"></constructor-arg> --></bean>
下面引用字符串:
<!--假设我要在容器中放入 字符串的对象可不可以直接赋值呢?--><bean class="java.lang.String"><constructor-arg index="0" value="我是名字"></constructor-arg></bean><bean class="java.lang.String"><constructor-arg index="0" value="我是密码"></constructor-arg></bean><bean class="com.qf.helloword.User"><constructor-arg index="0" ref="userName"></constructor-arg><constructor-arg index="1" ref="userPassword"></constructor-arg></bean>
工厂的模式来创建对象
<!--静态的方法生成我们的对象--><!--非静态的方法来生成对象--><bean class="com.qf.helloword.UserFactory"></bean><!--省传入那个工厂里面指定方法的对象--><bean factory-bean="factory" factory-method="getUserByNOStaticFacory"></bean><!--通过静态的方法来生成对象--><bean class="com.qf.helloword.UserFactory" factory-method="getUserByStaticFacory"></bean> 接下来我们研究下获取对象的APIClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("bean.xml");//第三步:获取这个JAVA对象//如果使用了类型来找这个对象的话那么 在IOC容器里面就只能有一个类型的对象才能找到//User user=(User) context.getBean(User.class);//通过名字来找 最稳定的//User user=(User) context.getBean("user_01");//System.out.println(user);注意:使用Spring的时候 默认调用的是无参数的构造参数
DI的配置
set 方法进行注入
1>:在需要对象的地方申明我们的类的成员变量
//Set注入的第一步:申明成员变量private UserDao userDao=null;//第二步:为成员变量生成set方法public void setUserDao(UserDao userDao) {this.userDao = userDao;}//第三步:在我们的bean.xml中进行如下配置<!--配置dao--><bean class="com.qf.di.UserDao"></bean><!--配置Service--><bean class="com.qf.di.UserService"><!--ref表示要引用我们ioc容器里面的资源--><property name="userDao" ref="userDao"></property></bean>
p标签进行注入
1>:在需要对象的地方申明我们的类的成员变量
//Set注入的第一步:申明成员变量private UserDao userDao=null;//第二步:为成员变量生成set方法public void setUserDao(UserDao userDao) {this.userDao = userDao;}<!--p标签注入--><bean class="com.qf.di.UserService" p:userDao-ref="userDao"></bean>内部bean的形式进行注入(基本不用)<!--内部bean--><bean class="com.qf.di.UserService"><property name="userDao"><bean class="com.qf.di.UserDao"></bean></property></bean>自动装配<!--自动装配--><bean class="com.qf.di.UserDao"></bean><!--name是通过名字找--><!-- <bean class="com.qf.di.UserService" autowire="byName"></bean> --><!--通过类型找 那么在IOC的 容器中只能有一个对象 有多个的话那么会报错--><bean class="com.qf.di.UserService" autowire="byType"></bean>还可以设置全局的自动装配
注解模式的使用
1>:配置扫描器
<context:component-scan base-package="com.qf.anotation"></context:component-scan>
2>将对象放置到IOC容器呢?
@Component @Service @Repository
3>:注对象
@Resource @Autowired
注意: 在业务逻辑层也可以使用 @Service
在dao层也可以使用 @Repository
2017-09-13 01:25:06
- Spring基础内容
- spring 几点基础内容
- 基础内容
- Spring学习内容
- Spring framework内容整理
- Spring获得properties内容
- spring ContentNegotiationManagerFactoryBean 内容协商
- Spring 内容总结
- spring ContentNegotiationManagerFactoryBean 内容协商
- spring-基础
- Spring基础
- Spring 基础
- Spring 基础
- spring 基础
- Spring基础
- spring基础
- Spring基础
- spring基础
- JavaScript 迭代优化(Duff's Device)
- 打造绚丽平行空间引导页
- shell脚本报错:"[: =: unary operator expected"
- shell脚本一键安装ftp及配置
- Eclipse Java注释模板设置详解 http://blog.csdn.net/ahhsxy/archive/2009/09/11/4542682.aspx
- Spring基础内容
- 英年早逝的不止ICO,我们可能失去更多
- java 截取字符串获取子字符串
- SylixOS中DNS静态映射简介
- sql server 附加数据库 错误5123 解决办法
- android sensor移植
- TensorFlow实现seq2seq
- json取值
- LeetCode--Minimum Path Sum