首页 > 代码库 > 浅谈Spring(一)
浅谈Spring(一)
一、Spring引言
Spring是一款轻量级框架,代码入侵量很小,并且还是众多优秀的设计模式的组合(工厂、代理、模板、策略)。
特点:
1、方便解耦,简化开发
2、AOP编程的支持
3、声明式事务的支持
4、方便程序的测试
5、方便集成各种优秀框架
二、着手Spring
1、环境搭建
a、导入核心jar包跟第三方依赖jar包。
b、配置文件
spring的配置文件只有一个:applicationContext.xml,放置的位置随意。
2、初识
a、 核心API
ApplicationContext工厂类。
(1)ClassPathXmlApplicationContext(非web环境下)
(2)WebXmlApplicationContext(web环境下)
通过以上两个接口都可以获得工厂类,该工厂类是一个重量级资源,一个应用只应该创建一个。在运用了spring的项目中,所有用户所写的类,都应该通过ApplicationContext工厂类来生产。
b、代码示例
applicationContext.xml配置:
<bean id="first" class="xxxxx.xxxx.First"/>
java代码:
ApplicationContext ctx = new ClassPathXmlApplicationContext("/xxxx/applicationContext.xml");First first = (First)ctx.getBean("first");
解释:
第一行通过ClassPathXmlApplicationContext读取spring配置文件获取applicationContext工厂类,参数为Spring配置文件的路径。
第二行则是由applicationContext工厂类来生产在配置文件中配置过的对象(根据id属性获得)。
三、IOC和DI(控制反转和依赖注入)
控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。 控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。依赖注入应用比较广泛。
简单点来说,就是将成员变量赋值的控制权,从代码中转移到xml文件中去。这样做的好处是解耦和,其原理是工厂+反射。
1、JDK类型成员变量的注入
a、8中基本类型+String
<bean id="user" class="xxxxx.User"> <property name="name"> <value>tom</value> </property> <property name="password"> <value>123456</> </property> <property name="age"> <value>20</value> </property></bean>
<propery name="password" value="123123"/>
两种写法都可以。
b、数组
<property name="emails"> <list> <value>tom1@live.com</value> <value>tom2@live.com</value> <value>tom3@live.com</value> </list></property>
c、set集合
<set> <value>123123</value> <value>123123</value> <value>123123</value> </set>//set标签内部的标签,取决于存放的数据类型,不一定是value
d、List集合
<list> <value>123123</value> <set> <value>123123</value> <ref local=""/></list>//和set同理,内部的标签取决于存的数据类型
e、map集合
<map> <entry> <key><value>tom</value></key> <value>123123</value> </entry></map>//一个entry节点代表一个键值对。
f、properties类型,等价于Map<Stirng,String>
<props> <prop key="key1" >value1</prop> <prop key="key2" >value2</prop></props>
2、用户自定义类型
首先要在spring配置文件中创建所对应的类<bean id="" class="" />。然后再将其注入。
//java类,示例代码public class UserService{ private UserDao userDao; get、set}
//spring配置文件<bean id="userDao" class="xxxx.UserDao"/><bean id="userService" class="xxxx.UserService"> <property name="userDao"> <ref local="userDao"> </property></bean>
用户自定义的类型要用<ref local="">标签来注入。
3、构造注入(不常用)
<bean id="user" class="xxxx.User" > <constructor-arg> <value>xxxx</value> </constructor-arg></bean>
四、spring创建复杂对象
1、利用FactoryBean创建复杂对象
浅谈Spring(一)