Spring基础
来源:互联网 发布:投针法计算圆周率c语言 编辑:程序博客网 时间:2024/05/22 14:23
一, Spring简介
面向bean的编程
企业级整合框架, 粘合济, 提供一站式的企业开发
不重复制造轮子, 与第三方框架完美的整合
二,IOC(重点)
1, IOC -- 控制反转 -- 主要解决类与类之间的依赖问题, 降低耦合度, 提高扩展性
DI -- 依赖注入,
依赖由容器管理, 由容器创建bean对象, 在运行时把依赖注入
默认在容器初始化时, 就会创建bean, 分析解决bean与bean之间的依赖
控制反转: 程序本身不再负责依赖对象的创建, 而是把对象创建跟依赖的注入交给容器去完成
降低程序之间的耦合度
Bean的容器, 管理Bean的整个生命周期, 默认是单例的, 对于同一个bean, 多次从spring容器中获取对象, 获取都是同一个对象
2, 常用的注入类型
set值注入--通过setter 方法实现注入, 设为不强制性注入
为属性提供setter方法
通过 <propertyname="userDao" ref="userDao"/>配置属性
构建器注入 -- 通过构建器实现注入, 一定要注入, 要不程序会报异常
提供带参的构建方法, 同时注意保留无参的构建方法, spring容器初始化bean时要调用无参构建方法
<constructor-argname="userDao" ref="userDao"></constructor-arg>
工厂注入(spring不支持)
3, bean的作用域
singleton 单例, 默认
prototype 多例的, 对同一个bean, 每一次获取, spring容器都会new一个新的对象
只适应于WebApplicationContext环境:
request request, 每一次请求创建一个实例
session session
global session application范围
4, 创建机制
BeanFactory 接口: 工厂模式的实现, 负责bean的创建, 要求的资源不是很大, 适用于资源有限的环境
- <span style="font-family:SimSun;font-size:18px;">// 通过BeanFactory创建bean,具有延迟加载的作用,当用到的时候,再去创建
- Resource resource = new ClassPathResource("applicationContext.xml");
- BeanFactory beanFactory = new XmlBeanFactory(resource);
- UserService user3 = beanFactory.getBean("userService",
- UserService.class);
- System.out.println(user3.getId());
- System.out.println(user3.getName());
- user3.printTest();</span>
getBean() 从容器中取得bean的实例
getTypes()
containsBean()
ApplicationContext 接口, 是BeanFactory的一个子接口, web程序一般就使用这个接口的实现类:
ClassPathXMLApplicationContext
<span style="white-space:pre"></span>ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");IUserService service = (IUserService) context.getBean("userService");System.out.println(service.checklogin("admin","123").getUsername());
n(service.checklogin("admin","123").getUsername());
FileSystemXMLApplicationContext
- ApplicationContext ctx2=new FileSystemXmlApplicationContext("spring.xml");
- UserService user2=ctx2.getBean("userService", UserService.class);
- System.out.println(user2.getId());
- System.out.println(user2.getName());
三, AOP--面向方面编程--核心: 动态代理模式
会使用spring提供的现有的功能,比如:配置性事务管理
1, 本质: 通过动态代理, 动态往程序中方法的前后添加一些功能(代码)
动态代理: JDK--实现类必须实现接口
CGLIB -- 二进制包实现动态代理
重点在以下图上:
2, 第一个例子
增强设计:
//把切面设计为一个一个的增强
<pre name="code" class="java">public classUserAdvice { private Logger logger =Logger.getLogger(UserAdvice.class); public void beforeService(JoinPoint joinpoint){ System.out.println("前置增强执行了"); } } aop配置: <aop:config> <!-- 定义切入点, 帮我找到要增强的方法列表joinpints集合 * com.chinasofti.service.*.*(..) 找到com.chinasofti.service下所有类所有方法 --> <aop:pointcutexpression="execution(* com.chinasofti.service.*.*(..))"id="userPointCut"/> <!-- 把 userAdvice定义为一个切面--> <aop:aspectref="userAdvice"> <aop:beforemethod="beforeService" pointcut-ref="userPointCut"/> </aop:aspect> </aop:config>
- spring-基础
- Spring基础
- Spring 基础
- Spring 基础
- spring 基础
- Spring基础
- spring基础
- Spring基础
- spring基础
- spring基础
- Spring基础
- Spring基础
- Spring 基础
- spring基础
- Spring基础
- Spring基础
- Spring基础
- spring基础
- 用JS获取地址栏参数的方法(超级简单)
- 选票统计
- 史上最全最强SpringMVC详细示例实战教程
- 发现了一个非常好用的 免费 仿真终端 MobaXterm 感觉比 SecureCRT 好用
- python 自动重连wifi windows
- Spring基础
- js实现冒泡排序
- win7 32位系统下安装paddle
- .gitignore简介
- bzoj1600(排列组合)
- 接口--制作接口
- BackgroundWriterMain代码
- Microsoft SQL Server,错误2
- 计算机图像处理领域重要期刊汇总