springIOC

使用ioc容器创建对象

1.调用无参数构造方法

 <bean id= class=  ></bean>

2.调用有参数构造方法

 <bean id="str" class="java.lang.String">
  <constructor-arg type="java.lang.String" value="jack"></constructor-arg>
 </bean>
  <bean id="user" class="com.xulifei.spring01.hello.User" scope="singleton"  lazy-init="false">
  <constructor-arg index="0" type="int" value="100"></constructor-arg>
  <constructor-arg index="1" type="java.lang.String" ref="str"></constructor-arg>
  </bean>

3.工厂

  静态工厂、非静态工厂

    <!-- 使用factory对象的方法,此方法一定是非静态的 -->
  <bean id="factory" class="com.xulifei.spring01.hello.ObjectFactory">
  </bean>
  <bean id="User2" factory-bean="factory" factory-method="getInstance"></bean>
  <!-- 使用静态方法创建,此方法一定是静态的 -->
  <bean id="User3" class="com.xulifei.spring01.hello.ObjectFactory" factory-method="getStaticInstance"></bean>


使用ioc容器解决对象依赖关系

spring中如何给对象赋值

1.通过构造函数

   <bean id="userDao" class="com.xulifei.spring01.hello.UserDao"></bean>
   <bean id="userService" class="com.xulifei.spring01.hello.UserService">
   <constructor-arg index="0" value="1"></constructor-arg>
   <constructor-arg index="1" value="2"></constructor-arg>
   <constructor-arg index="2" ref="userDao"></constructor-arg>
   </bean>
 

user类中不需要提供setget方法,只需要提供构造方法

public UserService(int id,String name,UserDao userDao) {
         this.id = id;
         this.name = name;
     this.userDao = userDao;
}

2.通过set方法给属性注入值

 <bean id="user" class="com.xulifei.spring01.hello.User">
 <property name="a"  value="100"></property>
 <property name="name" value="jack"></property>
 </bean>

给对象属性注入值

i.

 <bean id="user" class="com.xulifei.spring01.hello.User">
 <property name="对象变量名"  ref="在bean中配置了的创建对象id"></property>

 </bean>

ii.内部bean

 <!--内部bean-->
 <bean id="action" class="com.xulifei.conAction">
 <property name="service">
    <bean class="com.xulifei.service" >
    <property name="dao">
    <bean class="com.xulifei.dao"></bean>
    </property>
    </bean>
 </property>
 </bean> 

内部bean无法共享且不易维护


 user类提供set方法,可以用在action、service、dao中

在action的配置中应该写明scope=prototype



3.p名称空间

 <!-- 
 p命名空间赋值,spring3.0以上支持
 -->

引用赋值
  <bean id="userDao" class="com.xulifei.userDao" ></bean>
 <bean id="userService" class="com.xulifei.userService" p:userDao-ref="userDao"></bean>
 <bean id="userAction" class="com.xulifei.userAction" p:userService-ref="userService"></bean>

基本赋值

<bean id="user" class="com.xulifei.spring01.hello.User" p:a="100" p:name="xulifei"></bean>
 需要提供set方法

4.自动装配

全局配置         http://www.springframework.org/schema/context/spring-context.xsd" default-autowire="byName"><!-- 全局的根据名称自动装配,不用每个bean去配-->


 <!--根据名称自动装配:去ioc容器中去找与属性同名的对象 -->
  <bean id="userDao" class="com.xulifei.UserDao"></bean>
 <bean id="userService" class="com.xulifei.UserService" autowire="byName"></bean>
 <bean id="userAction" class="com.xulifei.UserAction" autowire="byName"></bean>
  


  <!--  根据类型自动装配,必须确保ioc容器中必须只有一个该类型的对象--> 
    <bean id="userDao" class="com.xulifei.UserDao"></bean>
 <bean id="userService" class="com.xulifei.UserService" autowire="byType"></bean>
 <bean id="userAction" class="com.xulifei.UserAction" autowire="byType"></bean>
 也可以配置全局

自动装配简化了配置,但是不利于维护

需要提供set方法

5.注解

创建对象把引用名称放入ioc容器中,默认与类名一样且第一个字母小写

@Component
@Repository
@Service
@Controller

相当于<bean id="..." class="..."></bean>

名称id可以任意定义

@Component("userDao")
@Repository("userDao")
@Service("userService")
@Controller("userAction")

@Resource根据类型查看,【在ioc容器中确保该类型只有一个变量】

3,4,5都是2的优化

以上注意了,通过ioc创建的对象,都需要从ioc容器中拿,包括依赖的对象,直接new出来的是没用的,依赖关系得不到维护

例如:   UserService userService = (UserService) applicationContext.getBean("userService");
userService.save();

如果直接是new UserService.save();会爆空指针异常,因为userservice中的userdao没有被注入;

xml和注解可以一起使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值