说到spring我相信所有的人都不会陌生,了解了他的IOC和AOP之后你会发现原来代码可以写的这么优雅。废话不多说,我现在想先说一说spring的架包。
首先是spring-core-xxxx这个包是spring的核心包,主要是IOC容器的一些对象,同时他是依赖于common-logging-xxx架包的。spring-aop-xxx也是显而易见的是关于AOP的一些对象,spring-bean-xxx其实和spring-core-xxx是相关联的,他主要是用来创建对象的,剩下的是spring-context-xxx和spring-expression-xxx两个架包。
关于spring的架包下载,现在似乎spring用的是maven下载的,相关的dependency可以在spring官网上找到,如果需要架包也可以在百度上找到资源,下面进入正题。
spring的IOC可以降低程序之间的耦合性,以便程序员后期对项目的修改和维护。spring的核心文件是他applicationContext.xml(xml文件名字可以自己定义)的文件。
<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/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<bean id="user" class="xxx.xxx.xxx" >
</bean>
</beans>
这个格式就是applicationContext.xml里的格式,这里面bean是指需要创建的的对象。
在java中的代码这么写
ClassPathXmlApplicationContext application = new ClassPathXmlApplicationContext("applicationContext.xml");
User user = (User) application.getBean("user");
很明显可以看出先是获取到applicationContext.xml的对象,然后根据bean的id来创建这个对象。不过这么创建的对象是单例的,也就是只创建这么一个对象。所有想要他不是单列可以加入
<bean id="user" class="xxx.xxx.xxx" scope="prototype" ></bean>
程序默认得是饿汉式的单例模式,如果想要用懒汉式模型加入
<bean id="user" class="xxx.xxx.xxx" scope="singleton" lazy-init="true"></bean>
这是最简单的无参数构造创建的一个对象,如果想要加入构造函数的话可以这么些
<bean id="user" class="xxx.xxx.xxx" scope="prototype" >
<constructor-arg value="20" index="0" name="age"></constructor-arg> //有index的话可以不用写name,这个name表示的是参数的名字,index表示的参数的索引位置
<constructor-arg value="张三" index="1" name="name" type="int"></constructor-arg>//这里type可以是数据的基本类型,也可以是类,不过类必须写全包括包名
<constructor-arg index="1" name="hello" type=" ref="已创建的对象"></constructor-arg>//这里ref里面索引必须是一个已经创建的对象,同时不能在使用value属性
</bean>
这里是普通创建对象。接下来是工厂创建对象,首先是非静态创建对象,
<bean id="userfactory" class="spring.test.hello.UserFactory"></bean>
<bean id="getUserByFactory" factory-bean="userfactory" scope="prototype" factory-method="getInstance"></bean>//先创建一个userfactory的工厂,然后根据工厂来取对象,这里factory-method表示是工厂内部用的什么方法创建的对象,factory-bean表示用那个工厂去创建对象。
然后是工厂静态的去创建对象
<bean id="gubsf" class="spring.test.hello.UserFactory" factory-method="getStaticInstance"></bean>这里class是工厂类所在的地方,然后factory-method是工厂内部所对应的静态创建对象的方法。
然后最后一块是依赖注入模块。
依赖注入主要是通过set方法去将对象或值注入到对象里面
<bean id="user" class="x" p:name="张三" p:age="20">
</bean>这里我用的是p空间,name是属性的值,注入的是普通的变量
<bean id="users" class="spring.test.hello.UserService">
<property name="user" ref="user"></property>
</bean>这里我通过property这个去注入,这里注入user对象