Spring基础第一章

目录

SpringIOC应用

IOC概念:

a.采用注入方式建立对象关系

b.Dependency Injection 依赖注入

二、Spring包含的属性

一、spring创建Bean对象的控制

例子

C.指定对象销毁方法

三、Spring容器—>管理组件及对象关系

四、参数注入、基于注解的组件扫描

Spring的所需要的组件

*a.注入字符串,数值单个数值

*b.注入bean对象(raf引入用的多)

c注入集合*list,set,map,*properties

d.spring表达式注入


SpringIOC应用

管理对象

创建、初始化、释放资源、销毁

IOC概念:

Iversion of Control 控制反转或反向控制(就好像大人给小孩吃什么就吃什么,原来小孩想吃什么大人做什么)

控制反转:改变了对象获取方式,之前编码方式采用new构造器方式获取对象;IOC中采用由容器创建对象之后注入进来使用。

A—>B把A注入B

SetB

  Spring基础第一章_第1张图片

维护对象关系(注入用property)

a.采用注入方式建立对象关系

b.Dependency Injection 依赖注入

   依赖注入:set方法注入,构造器注入

 

获取一下set,get方法

<!--set注入-->

------------------------------------------------------------------------

 

     配置两个组件是由于有两个参数

    

    

  

ref(应用)就是把p1,p2引用到s1中,也是注入到s1,就像机器把零件组装起来。

  搭建SpringIOC开发环境

--引入相关jar包

--在src添加applicationConte.xml

Spring包含的属性

spring创建Bean对象的控制

控制对象创建

方式(使用范围)在元素中使用scope属性控制scope可以支持singleton或prototype默认值是singleton。

该组件在Spring容器里只有一个bean对象。

该组件每次

Ac.getBean(“id”);都返回一个新的对象

Public class xxx{

 Private User user;(像这种就不适合用单例,适合用原型)

Public void f1(){

对user操作

}

}

Spring基础第一章_第2张图片

例子

创建一个org.song.bean包,类名是ExampleBean

Package org.song.bean;

Public class ExampleBean{

     写个构造函数 Public ExampleBean(){

//System.out.println(“解析其他配置文件”);

}

Public void init(){

System.out.println(“解析其他配置文件”);

}

     Public void execute(){

     System.out.println(“调用execute方法”);

}

}

在applicationContext.xml用spring框架中创建一个组件

声明一个bean (prototype意思是原型)

class=” org.song.bean. ExampleBean”> class里面写的要求包名类名保持一致。

现在开始写个测试类

包名org.song.bean

类名为test

Public class test{

Public static void main (String[] args){

String conf =”applicationContext.xml”;

ApplicationContext ac = new ClassPathXmlApplicationContext(conf);

ExampleBean e1 = Ac.getbean(“e1”,ExampleBean.class);

E1.execute();

}

}

指定对象初始化方法

利用元素的init-method指定。

当创建对象后自动执行init-method方法

单实例是唯一性只调一次,执行一次调用一次。

指定对象销毁方法

Public void mydestory(){

System.out.pritnln(“释放资源”);

}

利用元素的destroy-method指定。

满足下面条件才有效

--组件对象为单例模式

--调用AbstractApplicationContext容器对象的close()方法。

d.控制单例对象创建时机在默认情况下,单例对象是spring容器创建时实例化;

可以使用元素的lazy-init=true属性将创建时机推迟到getBean()方法调用时。

Spring容器—>管理组件及对象关系

a.创建ApplicationContext对象

b.向applicationContext.xml配置

c.利用ApplicationContext对象getBean()

参数注入、基于注解的组件扫描

Spring的所需要的组件

Spring基础第一章_第3张图片

自动注入

用于指定自动注入规则。可以使用bytype,byname,constructor等。用于简化注入配置。

使用bytype类型匹配注入需要注意,有两个及其以上匹配会出异常。

各种类型信息的注入配置格式

*a.注入字符串,数值单个数值

这是set注入的方式

*b.注入bean对象(raf引入用的多)

c注入集合*list,set,map,*properties

d.spring表达式注入

#{表达式}

#{id名.属性}或{id名.key}

如果是对象属性,需要有getxxx方法。

利用注解配置应用IOC

在JDK5.0时追加一些新特性

一直在用Listlist

for(String s:list){}

Integer i=10;自动装箱。

注解:在类定义,方法定义,成员变量定义前面使用,格式为@注解标记名

组件自动扫描

可以按指定的包路径,将包下所有组件扫描,如果发现组件定义前有一下标记,会将组件扫描到Spring容器。

@Service用于标注业务层组件

@Controller用于标注控制层组件(如struts中的action) 
@Repository用于标注数据访问组件,即DAO组件. 
@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注

@Named(需要引入第三方标准包)

@Scope控制对象创建

@PostConstrust指定init-method

@PreDestroy指定destroy-method

注入注解

@Resource:可以在变量定义前或setxxx方法应用与Autowired都发生的效果一样。

@Autowired:自动注入可以在变量定义前或setxx放啊前应用

一般使用时,功能等价,都可以实现注入。如果不存在多个匹配类型,使用@Resource或@Autowired都可以。

如果存在多个匹配类型,建议按名称注入

@Resource(name=”指定名称”)【按照指定名称去找,找到就正常运行找不到说明就错误】或

@Autowired

@Qualifier(“匹配名称”)按照指定名称来进行,找到就进,找不到就错。

 

你可能感兴趣的:(java,Spring)