spring入门

有一些摘自 JavaCrazyer 大大的...希望不要介意

Spring 介绍;
Spring是一个IoC容器,利用DI技术管理对象之间的依赖!
IoC: Inversion of Control(控制反转)
DI: Dependency Injection(依赖注入)
Spring也是一个对象工厂,它负责生产(即创建)和管理(比如控制它们的生命周期,或给特定的对象创建代理等等)着各种对象

 控制反转(IoC)
 所谓控制:即获取依赖对象的方式
 假如A要调用B的方法(即A依赖于B),则A首先要获得B对象
 B b = new BImplement();
 A直接依赖于B的具体实现
 B b = Factory.getBInstance();
 A依赖于工厂对象
 上面就是没有“反过来”的情况:A主动获取B对象
 反转
 即如果A要获取B对象,不是由A主动获取B对象,而是由其它人把B送给A(即将B注入给A),因为A依赖于B,所以B是A的依赖对象,因此称“依赖注入(DI)”
 在CMS项目中,我们已经了解了如何通过反射机制,来将某个对象注入到其它对象中!


Spring 配置;
引入spring-framework-3.0.4.RELEASE\dist 下所有的包.再引入一个spring依赖包里. spring依赖包\lib\jakarta-commons 下的 logging的包.
在根目录下写一个beans.xml;
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="userAction" class="cn.com.leadfar.UserAction"></bean>
</beans>

UserActionText.java
public void testAdd() {
BeanFactory factory = new ClassPathXmlApplicationContext("beans.xml");
UserAction userAction = (UserAction)factory.getBean("userAction");
userAction.add();}


 这是Spring中的工厂接口
 下面有众多的实现类
 常见的实现类是:ClassPathXmlApplicationContext
-----------------------------------------------------------------------------
<bean id="userAction" class="cn.com.leadfar.UserAction" scope="prototype"></bean>
scope=singleton
 单例
 scope=prototype
 多例
 - singleton:单例,每次getBean从Spring中拿对象都是同一个对象
 - prototype:原型,每次getBean从Spring中拿对象都是一个新的对象

------------------------------------------------------------------------------------
Spring IoC的依赖注入
1) 使用构造方法来注入依赖:比较麻烦 一般不使用

2) 使用setter方法来注入依赖:常用 在class上设置set方法.

3) 集合类型的注入
<property>
<set>、<list>、<map>、<props>
</property>

----------------------------------------------------------------------------
UserAction

package cn.com.leadfar;

public class UserAction {
private UserService userSer;
public void add(){
System.out.println("add");
userSer.addUser("1", "2");
}
public void setMyService(UserService us){
this.userSer=us;
}

}


UserService

package cn.com.leadfar;

public class UserService {
private UserDao userDao;
public UserService(UserDao userdao){
this.userDao=userdao;

}
public void addUser(String name,String password){
System.out.println("this is addUser method");
userDao.save();
}

}

UserDao

package cn.com.leadfar;

import java.util.List;
import java.util.Map;

public class UserDao {
private String name;
private int age;
private List lists;
private Map maps;
public void setName(String name) {
this.name = name;
}
public void setLists(List lists) {
this.lists = lists;
}
public void setAge(int age) {
this.age = age;
}
public void save(){
System.out.println("UserDao's method");
System.out.println(name+","+age+","+lists+","+maps);
}
public void setMaps(Map maps) {
this.maps = maps;
}

}



beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="userAction" class="cn.com.leadfar.UserAction" scope="prototype">
<property name="myService" ref="userService"></property>
</bean>

<bean id="userService" class="cn.com.leadfar.UserService" scope="prototype">
<constructor-arg ref="userDao"></constructor-arg>

</bean>
<bean id="userDao" class="cn.com.leadfar.UserDao">
<property name="name" value="farewell"></property>
<property name="age" value="5000"></property>
<property name="lists">
<list>
<value>123</value>
<value>456</value>
<value>789</value>
</list>
</property>
<property name="maps">
<map> <entry key="1" value="just some string"/>
<entry key="1" value="i want"/>
<entry key="2" value="catch u"/>
<entry key="3" value="okey"/>
<entry key="4" value="afdadf"/>
</map>

</property>
</bean>


</beans>


输出结果:
add
this is addUser method
UserDao's method
farewell,5000,[123, 456, 789],{1=i want, 2=catch u, 3=okey, 4=afdadf}
-------------------------------------------------------------------------
Spring中的依赖注入:
- 通过注解(annotation)来注入
- 【注意要使用JDK6】

1、首先,配置文件需要增加<context:annotation-config/>配置,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<context:annotation-config/>
</beans>


2、将需要管理的各种对象,定义到Spring配置文件中,如:

<bean id="userAction" class="cn.com.leadfar.spring.UserAction" scope="prototype">
</bean>
<bean id="userService" class="cn.com.leadfar.spring.UserService">
</bean>
<bean id="userDao" class="cn.com.leadfar.spring.UserDao">
</bean>
<bean id="helper" class="cn.com.leadfar.spring.OtherHelper"></bean>



3、在需要注入的类中,用@Resource注解进行注入:

@Resource
public void setMyService(UserService us){
this.userSer = us;
}

@Resource
public void setHelper(OtherHelper hhh){
this.h = hhh;
}

------------------------------------------------------------------------------
缺省情况下,@Resource注解,是按照类型【byType】进行注入!
@Resource注解,既可以放到setters方法前面,也可以直接定义到实例变量前面

----------------------------------------------------------------------------------
在Spring配置文件中增加:<context:component-scan base-package="cn.com.leadfar"/>,可以允许Spring自动扫描类路径中的类
并对定义了特殊注解的类进行管理
-------------------------------------------------------------------------------
- @Component("beanId") : 告诉Spring,这个类需要由Spring来管理
- @Scope("prototype") : 可以指定这个类的Scope属性
-----------------------------------------------------------------------------
自动扫描代码例:
xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package="cn.com.leadfar"/>
</beans>


UserAction

package cn.com.leadfar;

import javax.annotation.Resource;

import org.springframework.stereotype.Component;
@Component("userAction")
//需要spring来管理.也就是说spring 可以找到这个类.
public class UserAction {
private UserService userSer;
public void add(){
System.out.println("add");
userSer.addUser("1", "2");
}
@Resource
//这个是需要注入的
//一个set方法..
public void setUserSer(UserService userSer) {
this.userSer = userSer;
}
}

总结起来就是.在xml里配置Scan后.在需要管理的类上面加@Component 然后一个方法前面加@Resource 应该可以这么理解
也可以不用set方法.把@Resource加到 Private UserService userSer;上面
[/code]

UserAction

package cn.com.leadfar;

import javax.annotation.Resource;

import org.springframework.stereotype.Component;
@Component("userAction")
//需要spring来管理.也就是说spring 可以找到这个类.
public class UserAction {
@Resource
private UserService userSer;
public void add(){
System.out.println("add");
userSer.addUser("1", "2");
}
//@Resource
//这个是需要注入的
//一个set方法..
//public void setUserSer(UserService userSer) {
// this.userSer = userSer;
//}
}


有什么不对的地方可以指出来...偶现在正在入门..不要喷..咱心平气和的说..
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值