Spring学习之路-从放弃到入门
AOP:方法拦截器
IOC:类管理容器
主要讲讲这一天看Spring视频学到的东西,以下的叫法全是自创的。
1、类实例管理容器
关于Spring,首先是对类的管理,在常规情况,生成一个类需要调用new方法,如图:
public class Hello {
public void say(){
System.out.println("Hello");
}
public static void main(String[] a){
Hello h = new Hello();
h.say();
}
}
但是Spring可以替我们创建并管理类的实例,配置如图:
beans.xml
<bean id="hello" class="spring.Hello"/>
在xml文件中配置好对应的id与class后,可以通过一个上下文对象,根据id来获取对应的类:
public class Hello {
public void say(){
System.out.println("Hello");
}
public static void main(String[] a){
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
Hello h = (Hello)ctx.getBean("hello");
h.say();
}
}
这个类的默认形式是单例,可以通过设置scope值来改变其形式。
2、类依赖管理
除了可以生成类实例,还能通过配置来管理类之间的依赖。
直接上代码:
public class Hello {
private HelloWorld h;
public void setH(HelloWorld h) {
this.h = h;
}
public void say(){
System.out.println("Hello");
h.say("12345");
}
}
这里Hello类内部有一个HelloWorld类,如果需要调用,必须要new HelloWorld得到一个实例。
但是用xml的配置,可以省略这个过程:
beans.xml
<bean id="hello" class="spring.Hello">
<property name="h" ref="h"></property>
</bean>
<bean id="h" class="spring.HelloWorld"></bean>
这里的property代表初始化Hello类时传入的参数,name代表成员变量名,ref对应下面的id,代表是一个类的引用。
3、注解
使用注解也能完成上面的功能,而且更加方便,首先在xml配置如下:
beans.xml
<context:component-scan base-package="spring"/>
这个代表对spring包下所有的类进行注解搜索解析。
这里有几种注解,作用貌似差不多:component、Repository、Service,这些可以将类注册到bean中,语义上有些不同。
比如说:
@Repository("HelloWorld")
public class HelloWorld {
public void say(String str){
System.out.println("Hello: " + str);
}
}
注解括号的字符串代表之前那个id。
如果不加括号也可以,默认id规则遵循类名首字母小写再拼上其余字母,即HelloWorld => helloWorld。
类依赖就更加简单了,直接加个注解,连set方法都省了,如下:
@Service
public class Hello {
@Resource
private HelloWorld h;
public void say(){
System.out.println("Hello");
h.say("12345");
}
public static void main(String[] a){
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
Hello h = (Hello)ctx.getBean("hello");
HelloWorld h2 = (HelloWorld)ctx.getBean("helloWorld");
h.say();
}
}
Spring会根据HelloWorld类的类名自动寻找匹配,然后进行set操作。
至于那些ByName、ByType等等,太麻烦,等用到的时候再去查。
最后还有一个关于文件引入的注解,可以将外部的文件引入当前类,然后通过另外一个注解给成员变量赋值:
@Configuration
@ImportResource("classpath:abc.xml")
public class Hello {
@Value("${xxx}")
private HelloWorld h;
}
这个没有去试,等我撸完MVC和数据库写demo的时候,再回头试试。
(已学会简单CRUD,真简单……)
4、生命周期的钩子函数
可以通过实现InitializingBean、DisposableBean接口,并重写afterPropertiesSet、destroy方法,这两个方法会在实例被完全构造完或销毁时执行,具体代码实例如下:
@Service
public class bean implements InitializingBean,DisposableBean {
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("bean init");
} @Override
public void destroy() throws Exception {
System.out.println("bean destroy");
}
}
此时,启动服务器可以看到:
然后,点击STOP关闭服务器可以看到:(毛都看不到)
因为强制关闭服务器太暴力了,没有机会执行销毁方法, 模拟不出来。
当然也可以在配置中指定init-method和destroy-method方法:
<bean id="exampleInitBean" class="examples.ExampleBean" init-method="init"/>
<bean id="exampleInitBean" class="examples.ExampleBean" destroy-method="cleanup"/>
当然,最推荐的方法当然是注解:
@Service
public class bean {
@PostConstruct
public void init(){
System.out.println("bean init");
}
@PreDestroy
public void destroy(){
System.out.println("bean destroy");
}
}
这样方法名可以完全自由,不用与配置文件一一对应或者是接口的固定方法。
最后,可以通过全局配置,来定义所有IOC容器类的init和destroy方法:
<beans default-init-method="init"/>
大概Spring就这么多东西,事务?不知道不知道,超纲了,学完Spring和Mybatis再回头搞。
Spring学习之路-从放弃到入门的更多相关文章
- springboot 学习之路 1(简单入门)
目录:[持续更新.....] spring 部分常用注解 spring boot 学习之路1(简单入门) spring boot 学习之路2(注解介绍) spring boot 学习之路3( 集成my ...
- Spring学习之路-从入门到放弃
后台框架是真难入门啊!!!IDE的使用,环境的搭建,框架下载,上手,每一步都恶心人. 花了整整两天,才学会用idea,并且初步了解了maven(TM就是一个npm),然后跟着下载了对应的jar包,搭建 ...
- Spring学习之路-SpringBoot简单入门
简单讲SpringBoot是对spring和springMVC的二次封装和整合,新添加了一些注解和功能,不算是一个新框架. 学习来源是官方文档,虽然很详细,但是太墨迹了… 地址:https://doc ...
- 走进Spring Boot源码学习之路和浅谈入门
Spring Boot浅聊入门 **本人博客网站 **IT小神 www.itxiaoshen.com Spring Boot官网地址:https://spring.io/projects/spring ...
- Spring学习之路——简单入门HelloWorld
Spring简单介绍 Spring是一个提供了解决J2EE问题的一站式框架. Spring的核心是反转控制,通过配置文件完成业务对象之间的依赖注入,他鼓励一个良好的习惯,就是注入对接口编程而不是对类编 ...
- Spring学习之路三——第一个Spring程序(体会IoC)
体会IoC:Spring通过一种称作控制反转(IoC)的技术促进了松耦合.当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象.你可以认为IoC与JN ...
- Spring学习之路二——概念上理解Spring
一.概念. Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Develop ...
- Spring学习之路一
Spring 官网:http://projects.spring.io/spring-framework/ Spring下载地址:https://repo.spring.io/simple/libs- ...
- spring学习 十二 AspectJ-based的通知入门 带参数的通知
第一步:编写通知类 package com.airplan.pojo; import org.aspectj.lang.ProceedingJoinPoint; public class Advice ...
随机推荐
- [代码优化]PHP代码优化
// Code snippet 1 $u_id = Hnb_Session::getInstance()->getUserID(); $arr_joinedTribeInfo = array() ...
- brctl命令
有五台主机.其中一台主机装有linux ,安装了网桥模块,而且有四块物理网卡,分别连接同一网段的其他主机.我们希望其成为一个网桥,为其他四台主机(IP分别为192.168.1.2 ,192.168.1 ...
- Android x86模拟器Intel Atom x86 System Image配置与使用方法
Android x86模拟器Intel Atom x86 System Image配置与使用方法 前言: 大家现在开发使用的Android 模拟器模拟的是 ARM 的体系结构(ar ...
- collaborative filtering协同过滤
每次我想看电影的时候,都会去问我的朋友,小健.一般他推荐的电影,我都比较喜欢.显然不是所有人都有小健这样的能力.因为我碰巧和小健有类似的品味. 这个生活中的经验,实际上有着广泛的用途. 当系统需要为某 ...
- bootstrap基础学习小记(二)排版、列表、代码风格、表格
排版——标题.副标题.段落(正文文本).强调内容.粗体.斜体.强调相关的类.文本对齐 <!DOCTYPE HTML> <html> <head> <meta ...
- [leetcode.com]算法题目 - Sqrt(x)
Implement int sqrt(int x). Compute and return the square root of x. class Solution { public: int sqr ...
- 定位 和 z-index
三.定位 定位有三种:(1) 相对定位.(2) 绝对定位.(3) 固定定位 1.相对定位(相对于自己原来的位置定位) 现象和使用: a.如果对当前元素仅仅设置了相对定位,那么与标准流的盒子没什么区别: ...
- linux的Yum软件包管理工具
Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器.基于RPM包管理,能够从指定的服务器自动下载 ...
- JAVA实现微信支付V3
喜欢的朋友可以关注下,粉丝也缺. 相信很多的码友在项目中都需要接入微信支付,虽说微信支付已成为一个普遍的现象,但是接入的过程中难免会遇到各种各样的坑,这一点支付宝的SDK就做的很好,已经完成的都知道了 ...
- iOS-项目创建多个target
在开发中,有时需要两个或多个APP版本,每个版本的改动,不是很多,但是需要另外打包,那么我们就有两套方案: 1.重新开发,把代码复制一遍,然后在修改: 2.用一套代码,根据需求生成不同的包: 我们一般 ...