Spring知识点小结(一)
一、Spring的简介
1、spring是一个full-stack轻量级开源框架
2、spring的两大核心
IoC: inverse of control 控制反转:反转是对象的创建权,由原来自己new方式变成让spring容器(IoC容器)创建对象 作用:完成解耦合
AOP: 面向切面编程(底层实现:动态代理) 作用:不修改源码的情况下,对目标方法进行增强
3、spring优点
方便解耦 简化开发:IoC
aop编程支持:aop
声明式事务的支持:声明式事务控制
方便程序测试:spring集成junit
方便集成各种优秀框架:ssh整合
降低javaEEAPI的使用难度:
spring提供了很多工具模版 XXXTemplate
例如:
JdbcTemplate(相当于DBUtils)
HibernateTemplate
RedisTemplate
JmsTemplate
... ...
二、Spring的快速入
开发步骤:
1、导入spring的相关jar
4个基本包:beans、core、context、expression
日志:apache-commons-logging.jar、apache-log4j.jar(log4j.properties)
2、定义Bean
public class CustomerDaoImpl implements CustomerDao {
@Override
public void save() {
System.out.println("save running......");
}
}
3、配置xml文件
习惯将该xml文件命名为applicationContext.xml 存放到src下
约束头位置: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="customerDao" class="com.itheima.dao.impl.CustomerDaoImpl"></bean>
</beans>
4、通过spring客户端代码获得Bean对象
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
CustomerDao customerDao = (CustomerDao) app.getBean("customerDao");
customerDao.save();
三、Spring的配置
<!--
1、bean的基本配置(重点)
id: 产生对象在spring容器中的唯一标识
class: 要创建的bean的全限定名
scope: bean的作用域,取值很多
singleton(默认值): 单例
prototype: 原型,多例
Spring创建Bean的时机?
singleton:加载spring配置文件时 Bean创建
prototype:当getBean时创建Bean对象
<bean id="customerDao" class="com.itheima.dao.impl.CustomerDaoImpl" scope="prototype"></bean>
-->
<!-- 2、bean的初始化和销毁方法配置(了解)
init-method:指定该Bean的初始化方法
destroy-method:指定该Bean的销毁方法
<bean id="customerDao" class="com.itheima.dao.impl.CustomerDaoImpl" init-method="init" destroy-method="destroy"></bean>
-->
<!-- 3、bean的实例化三种方式
3.1 通过无参构造创建bean(有参构造) 重点
3.2 通过静态工厂方式(工厂方法是静态的) (了解了解了解)
<bean id="customerDao" class="com.itheima.factory.StaticBeanFactory" factory-method="getCustomerDao"></bean>
3.3 通过实例工厂方式 (了解了解了解)
<bean id="beanFactory" class="com.itheima.factory.InstanceBeanFactory"></bean>
<bean id="customerDao" factory-bean="beanFactory" factory-method="getCustomerDao"></bean>
-->
<!-- 配置dao -->
<bean id="customerDao" class="com.itheima.dao.impl.CustomerDaoImpl"></bean>
<!-- 4、配置service (依赖注入DI)
property:属性
name:Service对象的属性名称 setXxx中xxx
ref:根据id引用spring容器中的Bean对象
依赖注入:DI
解释:service要想正常的工作 内部必须依赖于dao
问题:IoC与DI是否是同一件事情?
IoC:控制反转,在spring容器中创建Bean
DI:依赖注入,在创建Bean时 将数据注入到Bean中
<bean id="customerService" class="com.itheima.service.impl.CustomerServiceImpl">
<property name="customerDao" ref="customerDao"></property>
</bean>
-->
<!-- 5、依赖注入的数据类型
5.1 对象引用(ref)
<property name="customerDao" ref="customerDao"></property>
5.2 普通属性
<property name="username" value="zhangsan"></property>
5.3 集合属性
见下面
-->
<bean id="customerService" class="com.itheima.service.impl.CustomerServiceImpl">
<property name="customerDao" ref="customerDao"></property>
<property name="username" value="zhangsan"></property>
<property name="strList">
<list>
<value>aaa</value>
<value>bbb</value>
</list>
</property>
<property name="customerList">
<list>
<ref bean="customer1"/>
<ref bean="customer2"/>
</list>
</property>
<property name="customerMap">
<map>
<entry key="c1" value-ref="customer1"></entry>
<entry key="c2" value-ref="customer2"></entry>
</map>
</property>
<property name="props">
<props>
<prop key="p1">ppp1</prop>
<prop key="p2">ppp2</prop>
</props>
</property>
</bean>
<!-- Customer -->
<bean id="customer1" class="com.itheima.domain.Customer">
<property name="name" value="tom"></property>
<property name="age" value="18"></property>
</bean>
<bean id="customer2" class="com.itheima.domain.Customer">
<property name="name" value="jeck"></property>
<property name="age" value="19"></property>
</bean>
<!--
6、注入的三种方式
6.1 set方法注入(重点)
6.2 构造方法注入
6.3 p命名空间注入 (也是set方法注入)
对set方法注入的简化操作
在xml中引入p命名空间
xmlns:p="http://www.springframework.org/schema/p"
-->
<bean id="customerService2" class="com.itheima.service.impl.CustomerServiceImpl2" p:username="lucy" p:customer-ref="customer2">
<constructor-arg name="name" value="zhangsan"></constructor-arg>
<constructor-arg name="age" value="20"></constructor-arg>
<constructor-arg name="customer" ref="customer1"></constructor-arg>
</bean>
四、Spring相关API
@Test
//测试Spring的相关API
public void test8(){
/*
* 加载spring配置文件 创建spring容器
* ApplicationContext接口的实现主要3个
* ClassPathXmlApplicationContext:
* ClassPath:该配置存在位置,类路径(src)
* Xml:加载配置的文件类型
* FileSystemXmlApplicationContext:
* FileSystem:该配置存在位置,文件系统(磁盘路径)
* Xml:加载配置的文件类型
*
* AnnotationConfigApplicationContext:
* AnnotationConfig: 注解配置 当消除xml配置文件后 配置使用注解替代后
*
*
*/
ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
//ApplicationContext app = new FileSystemXmlApplicationContext("D:\\java\\workspace\\workspack-heima311\\SpringDay01\\src\\applicationContext.xml");
//ApplicationContext app = new AnnotationConfigApplicationContext();
/*
* getBean有两种方式:
* 根据id从容器中获得Bean
* 根据类型从容器中获得Bean
*/
CustomerService customerService = (CustomerService) app.getBean("customerService2");
//CustomerService customerService = app.getBean(CustomerService.class);
customerService.save();
}
Spring知识点小结(一)的更多相关文章
- Spring知识点小结汇总
Spring部分 1.谈谈你对spring IOC和DI的理解,它们有什么区别? IoC Inverse of Control 反转控制的概念,就是将原本在程序中手动创建UserService对象的控 ...
- Spring知识点小结(四)
一.JdbcTemplate(jdbc模版--抽取的工具) web阶段DBUtils: QueryRunner runner = new QueryRunner(dataSource); ...
- Spring知识点小结(三)
一.aop的简介 aop:面向切面编程 aop是一种思想,面向切面编程思想,Spring内部提供了组件对aop进行实现 aop是在运行期间使用动态代理技术实现的思想 aop是oop延 ...
- Spring知识点小结(二)
一.配置非自定义的Bean(数据源DataSource模型) DBCP数据源: 导入dbcp的jar包:dbcp+pool+connector 代码实现: ...
- 【SpringBoot MQ 系列】RabbitMq 核心知识点小结
[MQ 系列]RabbitMq 核心知识点小结 以下内容,部分取材于官方教程,部分来源网络博主的分享,如有兴趣了解更多详细的知识点,可以在本文最后的文章列表中获取原地址 RabbitMQ 是一个基于 ...
- SpringBoot 系列教程之事务隔离级别知识点小结
SpringBoot 系列教程之事务隔离级别知识点小结 上一篇博文介绍了声明式事务@Transactional的简单使用姿势,最文章的最后给出了这个注解的多个属性,本文将着重放在事务隔离级别的知识点上 ...
- disruptor笔记之四:事件消费知识点小结
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- C++重要知识点小结---3
C++重要知识点小结---1:http://www.cnblogs.com/heyonggang/p/3246631.html C++重要知识点小结---2:http://www.cnblogs.co ...
- C++重要知识点小结---2
C++重要知识点小结--1 :http://www.cnblogs.com/heyonggang/p/3246631.html 1.C++允许程序员声明一个不能有实例对象的类,这样的类惟一的用途是被继 ...
随机推荐
- 用DebuggerDisplay在Visual Studio的调试器中定制类的显示方式
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:用DebuggerDisplay在Visual Studio的调试器中定制类的显示方式.
- CSS+DIV进度条
<style type="text/css"> .Bar { position: relative; width: 200px; /* 宽度 */ border: 1p ...
- go语言中文处理
中文在go语言中占三个字节,len 或者 range 一个含中文的字符串跟我们预期的结果不一样 求长度用 utf8.RuneCountInString,遍历用 rune func main() { t ...
- win10x系统下的Git下载安装
git安装和使用百度一下就有,官方地址https://git-scm.com/book/zh/v1/起步-安装-Git 但是说的并不是很详细,自己记录一下, 首先我们去官网下载一个git 有两个下载地 ...
- Hadoop-HA(高可用)集群搭建
Hadoop-HA集群搭建 一.基础准备工作 1.准备好5台Linux系统虚拟服务器或物理服务器 我这里演示采用虚拟服务器搭建Hadoop-HA集群,各自功能分配如下: NameNode节点:vt-s ...
- Windows7中Java64位环境变量配置:javac不是内部命令或外部命令,也不是可运行的程序或批处理文件。
按照默认设置安装完JDK(Java Developement Kits)后,一般默认路径为:C:\Program Files\Java\jdk1.8.0_05_x64\文件夹. 然后配置环境变量:&q ...
- AS打包出现app:transformClassesAndResourcesWithProguardForRelease错误
今天打包项目的正式签名APK出现以下错误,当时挺着急用的实在没办法就只能用测试apk凑合来对付一下了 Error:Execution failed for task ':app:transformCl ...
- XUtils3 的 环境搭建与简单使用
XUtils3 的 环境搭建 环境搭建三部曲 ----------------------- 说明 : author 修雨轩陈 使用andorid Studio 已经创建了一个项目 并且自己需要使用 ...
- Android Proguard.flags LOCAL_PROGUARD_FLAGS
在Android项目中用到JNI,当用了proguard后,发现native方法找不到很多变量,原来是被produard优化掉了.所以,在JNI应用中该慎用progurad啊. 解决办法: 1.在An ...
- 设计模式——工厂方法模式(Factory Method)
原文地址:http://www.cnblogs.com/Bobby0322/p/4179921.html 介绍 在简单工厂模式中,我们提到,工厂方法模式是简单工厂模式的一个延伸,它属于Gof23中设计 ...