Java : Spring基础 IOC

使用 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实现的规范)

原文地址:https://www.cnblogs.com/cccy0/p/10242732.html