0%

源码解读Spring IOC原理(四)

IOC容器的高级特性
介绍

通过前面4篇文章对Spring IoC容器的源码分析,我们已经基本上了解了Spring IoC容器对Bean定义资源的定位、读入和解析过程,同时也清楚了当用户通过getBean方法向IoC容器获取被管理的Bean时,IoC容器对Bean进行的初始化和依赖注入过程,这些是Spring IoC容器的基本功能特性。Spring IoC容器还有一些高级特性,如使用lazy-init属性对Bean预初始化、FactoryBean产生或者修饰Bean对象的生成、IoC容器初始化Bean过程中使用BeanPostProcessor后置处理器对Bean声明周期事件管理和IoC容器的autowiring自动装配功能等。

阅读全文 »

源码解读Spring IOC原理(三)

IOC容器的依赖注入
依赖注入发生的时间

当Spring IoC容器完成了Bean定义资源的定位、载入和解析注册以后,IoC容器中已经管理类Bean定义的相关数据,但是此时IoC容器还没有对所管理的Bean进行依赖注入,依赖注入在以下两种情况发生:

  • 用户第一次通过getBean方法向IoC容索要Bean时,IoC容器触发依赖注入。
  • 当用户在Bean定义资源中为元素配置了lazy-init属性,即让容器在解析注册Bean定义时进行预实例化,触发依赖注入。

BeanFactory接口定义了Spring IoC容器的基本功能规范,是Spring IoC容器所应遵守的最底层和最基本的编程规范。BeanFactory接口中定义了几个getBean方法,就是用户向IoC容器索取管理的Bean的方法,我们通过分析其子类的具体实现,理解Spring IoC容器在用户索取Bean时如何完成依赖注入。

在BeanFactory中我们看到getBean(String…)函数,它的具体实现在AbstractBeanFactory中

阅读全文 »

源码解读Spring IOC原理(二)

IOC容器的初始化?

IoC容器的初始化包括BeanDefinition的Resource定位、载入和注册这三个基本的过程。我们以ApplicationContext为例讲解,ApplicationContext系列容器也许是我们最熟悉的,因为web项目中使用的XmlWebApplicationContext就属于这个继承体系,还有ClasspathXmlApplicationContext等,其继承体系如下图所示

ApplicationContext允许上下文嵌套,通过保持父上下文可以维持一个上下文体系。对于bean的查找可以在这个上下文体系中发生,首先检查当前上下文,其次是父上下文,逐级向上,这样为不同的Spring应用提供了一个共享的bean定义环境。

阅读全文 »

源码解读Spring IOC原理(一)

什么是IOC/DI?

IoC 容器:最主要是完成了完成对象的创建和依赖的管理注入等等。

先从我们自己设计这样一个视角来考虑:

所谓控制反转,就是把原先我们代码里面需要实现的对象创建、依赖的代码,反转给容器来帮忙实现。那么必然的我们需要创建一个容器,同时需要一种描述来让容器知道需要创建的对象与对象的关系。这个描述最具体表现就是我们可配置的文件。
XmlXmlXml
对象和对象关系怎么表示?

可以用 xml , properties 文件等语义化配置文件表示。

描述对象关系的文件存放在哪里?

可能是 classpath , filesystem ,或者是 URL 网络资源, servletContext 等。

回到正题,有了配置文件,还需要对配置文件解析。

不同的配置文件对对象的描述不一样,如标准的,自定义声明式的,如何统一? 在内部需要有一个统一的关于对象的定义,所有外部的描述都必须转化成统一的描述定义。

如何对不同的配置文件进行解析?需要对不同的配置文件语法,采用不同的解析器

阅读全文 »

JAVA动态代理机制以及使用场景

什么是代理?

大道理上讲代理是一种软件设计模式,目的地希望能做到代码重用。具体上讲,代理这种设计模式是通过不直接访问被代理对象的方式,而访问被代理对象的方法。这个就好比 商户—->明星经纪人(代理)—->明星这种模式。我们可以不通过直接与明星对话的情况下,而通过明星经纪人(代理)与其产生间接对话。

什么情况下使用代理?
  • 设计模式中有一个设计原则是开闭原则,是说对修改关闭对扩展开放,我们在工作中有时会接手很多前人的代码,里面代码逻辑让人摸不着头脑(sometimes the code is really like shit),这时就很难去下手修改代码,那么这时我们就可以通过代理对类进行增强。

  • 我们在使用RPC框架的时候,框架本身并不能提前知道各个业务方要调用哪些接口的哪些方法 。那么这个时候,就可用通过动态代理的方式来建立一个中间人给客户端使用,也方便框架进行搭建逻辑,某种程度上也是客户端代码和框架松耦合的一种表现。

  • Spring的AOP机制就是采用动态代理的机制来实现切面编程。

阅读全文 »

Linux下Oracle安装(四)

启动监听和数据库
1
2
3
# /oracle/app/oracle/product/11.2.0/dbhome_1/bin/lsnrctl start
# /oracle/app/oracle/product/11.2.0/dbhome_1/bin/sqlplus / as sysdba
SQL> startup
设置dba密码
1
SQL> alter user sys identified by 123456;
使用Oracle客户端,创建表空间
1
2
3
4
5
6
7
create tablespace ccmp_app 						-表空间名称
logging
datafile '/oracle/ccmp-databases/ccmp_app' -表空间存储位置
size 10m
autoextend on
next 10m maxsize 20480m
extent management local;
使用Oracle客户端,创建临时表空间
1
2
3
4
5
6
create temporary tablespace ccmp_app_temp 			-表空间名称
tempfile '/oracle/ccmp-databases/ccmp_app_temp' -表空间存储位置
size 10m
autoextend on
next 10m maxsize 20480m
extent management local;
创建用户和指定表空间
1
2
3
SQL> create user ccmp_app identified by 123456;
SQL> default tablespace ccmp_app;
SQL> temporary tablespace ccmp_app_temp;
赋予用户权限
1
SQL> grant connect,resource,dba to ccmp_app;

Linux下Oracle安装(三)

配置监听文件和本地服务
1
# /oracle/app/oracle/product/11.2.0/dbhome_1/bin/netca

创建监听服务,作为Oracle的服务端

使用tcp协议

Oracle的默认的端口是1521

阅读全文 »

Linux下Oracle安装(二)

运行Oracle安装文件
1
2
3
# su oracle
# source ~/.bash_profile
# /opt/oracle/database/runInstaller -jreLoc /opt/jdk1.7.0_80/

阅读全文 »

Linux下Oracle安装(一)

在Linux中安装Oracle主要有以下几步

安装Oracle依赖包
1
# yum -y install binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel glibc glibc-common glibc-devel gcc gcc-c++ libaio-devel libaio libgcc libstdc++ libstdc++-devel make sysstat unixODBC unixODBC-devel pdksh ksh libaio.i686 glibc.i686 compat-libstdc++-33.i686 libaio-devel.i686 libgcc.i686 libstdc++.i686 unixODBC.i686 unixODBC-devel.i686
创建Oracle对应目录并设置权限
1
2
# mkdir -p /oracle/app/oracle && chown -R oracle:oinstall /oracle/app/oracle
# mkdir -p /oracle/app/oraInventory && chown -R oracle:oinstall /oracle/app/oraInventory
安装图形界面
1
2
3
4
5
6
# yum install xhost
# yum grouplist
# yum groupinstall "X Window System"
# yum groupinstall Desktop
# yum install xterm
# yum install xclock
阅读全文 »

前言

近遇到这样一个问题,我在阿里云室架设了一台服务器,发现外部网元对服务器攻击非常平凡,都知道服务器开放出来的端口越多,对服务器的风险越大。如何来规避这些风险呢,下面具体说明在阿里云上搭建一个跳板机来访问内网服务器,提升服务器的安全。

描述一下目前的机器状况,梳理梳理:
机器 IP 用户名 备注
A 123.78.150.91 root 外网服务器,相当于桥梁的作用,跳板机
B 172.18.62.123 root 目标服务器,处于内网
C 123.123.123.123 win 自己的电脑
阅读全文 »