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;

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">



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


 这是Spring中的工厂接口
 下面有众多的实现类
 常见的实现类是:ClassPathXmlApplicationContext
-----------------------------------------------------------------------------

scope=singleton
 单例
 scope=prototype
 多例
 - singleton:单例,每次getBean从Spring中拿对象都是同一个对象
 - prototype:原型,每次getBean从Spring中拿对象都是一个新的对象

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

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

3) 集合类型的注入




----------------------------------------------------------------------------
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


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">













123
456
789

















输出结果:
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、首先,配置文件需要增加配置,如下所示:


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">





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











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配置文件中增加:,可以允许Spring自动扫描类路径中的类
并对定义了特殊注解的类进行管理
-------------------------------------------------------------------------------
- @Component("beanId") : 告诉Spring,这个类需要由Spring来管理
- @Scope("prototype") : 可以指定这个类的Scope属性
-----------------------------------------------------------------------------
自动扫描代码例:
xml:


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">




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;
//}
}


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

你可能感兴趣的:(spring入门)