p命名空间的使用(不推荐用)

xmlns:p="http://www.springframework.org/schema/p"

p:没有xsd文件,直接加上面那句就好了

     <!-- singleton和prototype -->
     <bean id="user" class="com.bdqn.entity.User" scope="prototype">
         <property name="username" value="admin"></property>
         <property name="password" value="123"></property>
     </bean>
     <!-- p -->
     <bean id="user_p" class="com.bdqn.entity.User" 
      p:username="admin" p:password="123"></bean>
public class testScope {

    @Test
    public void test() {
        //默任singleton
        ApplicationContext ctx= new ClassPathXmlApplicationContext(
                "applicationContext.xml");
        
        //客户端1拿到的东西
        User user = ctx.getBean("user_p",User.class);
        System.out.println(user.getUsername());//admin
        user.setUsername(user.getUsername()+"1");
        
        //客户端2拿到的东西(对唯一实例的修改)
        User user2 = ctx.getBean("user_p",User.class);
        System.out.println(user2.getUsername());//admin1
        user2.setUsername(user.getUsername()+"2");
        
        //客户端3拿到的东西(对唯一实例的修改)
        User user3 = ctx.getBean("user_p",User.class);
        System.out.println(user3.getUsername());//admin12
    
        System.out.println(user==user2);//true
        System.out.println(user==user3);//true
    
    }

}

自动装配

1 <!-- 自动装配 -->
    <bean id="userDao" class="com.bdqn.dao.UserDaoImpl"></bean>
      <bean id="userService" class="com.bdqn.service.UserService">     2 <bean id="dao" class="com.bdqn.dao.UserDaoImpl"></bean> 3 <bean id="userService2" class="com.bdqn.service.UserService" 4 autowire="byName"> 5 6 </bean>

test类

 1 public class TestAutowire {
 2 
 3     @Test
 4     public void test() {
 5         ApplicationContext ctx= new ClassPathXmlApplicationContext(
 6                 "applicationContext.xml");
 7         UserService service =(UserService)ctx.getBean("userService2");
 8         service.save();
 9     }
10 
11 }
当 autowire="no"时,
  默认值,spring默认不进行自动装配,必须显示指定依赖对象
当 autowire="byName"时,输出保存----找属性
  根据属性名自动装配,spring自动查找与属性名相同的id
  如果找到,则自动注入,否则什么都不做
当 autowire="byType"时,就得删了2个中class相同的一个bean。没有删除就会提示出,找到2个----找属性
  根据属性的类型自动装配,spring自动查找与属性类型相同的bean,如果刚好找到唯一的那个,则自动注入
  如果找到多个与属性类型相同的Bean,则跑出异常,如果没找到,就什么也不做
当 autowire="constructor"时,---直接找构造方法
  和byType类似,不过它针对构造方法,如果spring找到一个Bean和构造方法的参数类型相匹配,则通过构造注入
该依赖对象,如果找不到,就抛出异常
 1 <!-- 自动装配,里面的装配都不需要写
 2         注意必须满足2点:1、UserServiceImpl.java里的属性名必须和applicationContext.xml里对应的bean id的名字相同
 3         2、 在声明里配置一个属性autowire="byName"(通过名字自动装配)也就是说:cn.bdqn.biz.service.impl.UserServiceImpl的属性名与bean的id名称相同就会自动装配-->
 4     <!--
 5     <bean id="userServiceImpl" class="cn.bdqn.biz.service.impl.UserServiceImpl" autowire="byName"/>
 6     <bean id="userDao" class="cn.bdqn.biz.dao.impl.UserDaoImpl"/>
 7     -->
 8     
 9     <!-- autowire="byType" 自动装配类型,根据类型自动装配,类型不能相同
10         也就是说:cn.bdqn.biz.service.impl.UserServiceImpl的属性类型与bean中有相同的类型的时候就会自动装配
11         注:不可以有相同的类型,也就是说不可以有相同的类名存在,ID可有可无,但是一般情况下是存在的,它与其他没有关联-->
12     <!-- 
13     <bean id="userServiceImpl" class="cn.bdqn.biz.service.impl.UserServiceImpl" autowire="byType"/>
14     <bean id="userDaoImpl" class="cn.bdqn.biz.dao.impl.UserDaoImpl"/>
15      -->
16     
17     <!-- autowire="constructor" 根据类型自动装配,根据构造器的参数显示
18         也就是说:cn.bdqn.biz.service.impl.UserServiceImpl的属性类型与bean中有相同的类型的时候就会自动装配
19         注:执行这个xml的时候,要有构造函数(有参)若容器中没找到与构造器参数类型一致的bean,则抛出异常-->

 

posted @ 2015-10-27 22:47  夏末、初秋  阅读(999)  评论(0编辑  收藏  举报