欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java : Spring基础 IOC

程序员文章站 2022-07-26 10:24:33
使用 ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");创建一个工厂,可以用 getBean()获取一个交给spring管理的类实例. XML配置文件: bean标签里面 ......

使用 applicationcontext context = new classpathxmlapplicationcontext("applicationcontext.xml");
创建一个工厂,可以用 getbean()获取一个交给spring管理的类实例.

xml配置文件:
bean标签里面id代表名字(name和id差不多,有一些区别),getbean就需要这个id.
class 代表用哪一个类生成实例对象.
init-method 可以指定对象被实例化之后执行的一个方法,需要在类里面实现这个方法
destroy-method 指定对象被销毁之前执行的方法,(前提:是单例(默认就是单例),而且在工厂关闭时才会被销毁.)
scope 代表bean的作用范围:
  singleton: 默认, 单例模式
  prototype: 多例模式
  request: 应用在web项目中,创建之后放到request范围中
  session: 应用在web项目中,创建之后放到session范围中
  globalsession: 应用在web项目中,必须在porlet环境下使用,如果没有这种环境,那么他就相当于session

属性注入:
  构造方法方式: 首先需要声明类的构造函数, 然后在配置里面如:
  <bean id="userservice" class="com.smile.myweb.userserviceimpl" scope="prototype">
    <constructor-arg name="name" value="哈哈"/>
    <constructor-arg name="age" value="18"/>
  </bean>

  set方法方式:需要声明set方法,然后配置:
  <bean id="userservice" class="com.smile.myweb.userserviceimpl" scope="prototype">
    <property name="name" value="哈哈"/>
    <property name="age" value="18"/>
  </bean>
  (注意如果属性是一个对象类型,就需要用ref来设置bean的id或name,value是赋普通值用的)

  p名称空间的方式(spring2.5以后)首先需要引入 xmlns:p="http://www.springframework.org/schema/p"
  然后用p:user="user"赋值普通属性或者用p:user-ref="user"赋值对象属性.

  spel的方式属性注入:value=#{'string'},字符串类型需要用单引号,对象类型直接写bean的id,也可以使用对象的属性或者方法等进行赋值.

  集合类型的属性注入可以这么声明(set, map 同理):
  <property name="user">
    <list>
      <value>王五</value>
      <value>李四</value>
    </list>
  </property>

  在xml配置文件中引入别的配置文件 <import resource="applicationcontext2.xml"/>

==============================================================================

注解方式ioc:
需要在xml里面配置<context:component-scan base-package="com.smile.myweb"/>

@component : 修饰一个类,把类交给springioc容器(相当于<bean>), 里面value相当于类的id.
  @controller : 衍生注解,web层
  @service : 衍生注解,业务层
  @repository : 衍生注解,持久层

初始化方法的注解@postconstruct, 加在init方法上,相当于init-method
销毁方法的注解@predestroy, 加在destroy方法上,相当于destroy-method

bean作用范围的注解:@scope, 默认是singleton,prototype是多例

属性注入的注解:
@value : 设置普通属性的值
@autowired : 设置对象属性的值(默认是按类型来注入对象的,如果需要按id注入,需要搭配@qualifier(value="beanid"))
(@resource相当于 @autowired+@qualifier,里面的name就相当于beadid,这个是spring实现的规范)