zoukankan      html  css  js  c++  java
  • Spring框架总结(四)

    对象依赖关系

    Spring中,如何给对象的属性赋值?  【DI, 依赖注入】

             1) 通过构造函数

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

             3) p名称空间

             4)自动装配(了解)

             5) 注解

    一、对象属性赋值,通过构造函数

    user

     1 public class User {
     2 
     3     private String userId;
     4     private String username;
     5 
     6     public User() {
     7         System.out.println("======不带参构造器=========");
     8     }
     9 
    10     public User(String userId, String username) {
    11         System.out.println("======带参构造器=========");
    12         this.userId = userId;
    13         this.username = username;
    14     }
    15 
    16     public String getUserId() {
    17         return userId;
    18     }
    19 
    20     public void setUserId(String userId) {
    21         this.userId = userId;
    22     }
    23 
    24     public String getUsername() {
    25         return username;
    26     }
    27 
    28     public void setUsername(String username) {
    29         this.username = username;
    30     }
    31 
    32     @Override
    33     public String toString() {
    34         return "User [userId=" + userId + ", username=" + username + "]";
    35     }
    36 
    37 }

    bean.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
     4     xmlns:context="http://www.springframework.org/schema/context"
     5     xsi:schemaLocation="
     6         http://www.springframework.org/schema/beans
     7         http://www.springframework.org/schema/beans/spring-beans.xsd
     8         http://www.springframework.org/schema/context
     9         http://www.springframework.org/schema/context/spring-context.xsd">
    10 
    11 
    12     <!-- 对象属性赋值 通过构造函数 -->
    13     <bean id="user" class="com.liuyang.demo.property.User">
    14         <constructor-arg index="0" value="100"></constructor-arg>
    15         <constructor-arg index="1" value="小白兔"></constructor-arg>
    16     </bean>
    17 </beans>

    测试

     1 public class App {
     2 
     3     ApplicationContext aContext = new ClassPathXmlApplicationContext(
     4             "com/liuyang/demo/property/beans2.xml");
     5 
     6     @Test
     7     public void test() {
     8         User user = (User) aContext.getBean("user1");
     9 
    10         System.out.println(user);
    11     }
    12 }

    二、通过set方法给属性注入值

    更改bean,其他不变

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
     4     xmlns:context="http://www.springframework.org/schema/context"
     5     xsi:schemaLocation="
     6         http://www.springframework.org/schema/beans
     7         http://www.springframework.org/schema/beans/spring-beans.xsd
     8         http://www.springframework.org/schema/context
     9         http://www.springframework.org/schema/context/spring-context.xsd">
    10 <!-- set方法赋值 -->
    11     <bean id="user1" class="com.liuyang.demo.property.User">
    12         <property name="userId" value="101"></property>
    13         <property name="username" value="大虎猫"></property>
    14     </bean>
    15 
    16 </beans>

    事例一个set方法传值案例:

    创建userdao

    1 public class UserDAO {
    2 
    3     public void saveUser() {
    4         System.out
    5                 .println("保存成功**********************************************");
    6 
    7     }
    8 
    9 }

    创建servicedao

     1 public class UserService {
     2     private UserDAO dao;
     3 
     4     public void setDao(UserDAO dao) {
     5         this.dao = dao;
     6     }
     7 
     8     public void save() {
     9         dao.saveUser();
    10     }
    11 
    12 }

    创建action

     1 public class UserAction {
     2 
     3     private UserService us;
     4 
     5     public void setUs(UserService us) {
     6         this.us = us;
     7     }
     8 
     9     public String execute() {
    10         us.save();
    11         return null;
    12     }
    13 
    14 }

    bean.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
     4     xmlns:context="http://www.springframework.org/schema/context"
     5     xsi:schemaLocation="
     6         http://www.springframework.org/schema/beans
     7         http://www.springframework.org/schema/beans/spring-beans.xsd
     8         http://www.springframework.org/schema/context
     9         http://www.springframework.org/schema/context/spring-context.xsd">
    10 
    11 
    12     <!-- 对象属性赋值 通过构造函数 -->
    13     <bean id="user" class="com.liuyang.test.DI.User">
    14     </bean>
    15     <!-- dao注入 -->
    16     <bean id="dao" class="com.liuyang.test.DI.UserDAO">
    17     </bean>
    18 
    19     <!-- service注入 -->
    20     <bean id="us" class="com.liuyang.test.DI.UserService">
    21         <property name="dao" ref="dao"></property>
    22     </bean>
    23 
    24     <!-- action注入 -->
    25     <bean id="userAction" class="com.liuyang.test.DI.UserAction">
    26         <property name="us" ref="us"></property>
    27     </bean>

    测试

     1 public class App {
     2 
     3     ApplicationContext aContext = new ClassPathXmlApplicationContext(
     4             "com/liuyang/test/DI/beans2.xml");
     5 
     6     @Test
     7     public void test() {
     8         UserAction userAction = (UserAction) aContext.getBean("userAction");
     9 
    10         userAction.execute();
    11     }
    12 }

    还有内部的bean写法如图,适用于只有一个dao和一个service的情况

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
     4     xmlns:context="http://www.springframework.org/schema/context"
     5     xsi:schemaLocation="
     6         http://www.springframework.org/schema/beans
     7         http://www.springframework.org/schema/beans/spring-beans.xsd
     8         http://www.springframework.org/schema/context
     9         http://www.springframework.org/schema/context/spring-context.xsd">
    10 <!-- 内部调用 dao和service在容器中只用一次,缺点不易维护-->
    11     <bean id="userAction1" class="com.liuyang.test.DI.UserAction">
    12         <property name="us">
    13             <bean class="com.liuyang.test.DI.UserService">
    14                 <property name="dao">
    15                     <bean class="com.liuyang.test.DI.UserDAO"></bean>
    16                 </property>
    17             </bean>
    18         </property>
    19     </bean>
    20 </beans>

    三、p名称空间的使用

    (1)p引用的使用

    保证约束条件有xmlns:p="http://www.springframework.org/schema/p"

    更改bean.xml

     1 <!-- 
     2             给对象属性注入值:
     3             # p 名称空间给对象的属性注入值
     4              (spring3.0以上版本才支持)
     5 -->
     6 <?xml version="1.0" encoding="UTF-8"?>
     7 <beans xmlns="http://www.springframework.org/schema/beans"
     8     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
     9     xmlns:context="http://www.springframework.org/schema/context"
    10     xsi:schemaLocation="
    11         http://www.springframework.org/schema/beans
    12         http://www.springframework.org/schema/beans/spring-beans.xsd
    13         http://www.springframework.org/schema/context
    14         http://www.springframework.org/schema/context/spring-context.xsd">
    15 <bean id="user" class="com.liuyang.test.DI.User">
    16     </bean>
    17     <bean id="dao" class="com.liuyang.test.DI.UserDAO"></bean>
    18     <bean id="us" class="com.liuyang.test.DI.UserService" p:dao-ref="dao"></bean>
    19     <bean id="userAction" class="com.liuyang.test.DI.UserAction"
    20         p:us-ref="us"></bean>
    21 </beans>

    (2)p传值的引用

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
     4     xmlns:context="http://www.springframework.org/schema/context"
     5     xsi:schemaLocation="
     6         http://www.springframework.org/schema/beans
     7         http://www.springframework.org/schema/beans/spring-beans.xsd
     8         http://www.springframework.org/schema/context
     9         http://www.springframework.org/schema/context/spring-context.xsd">
    10 <bean id="meinv" class="com.liuyang.test.DI.User" p:username="小白兔"></bean>
    11 </beans>

    p命名空间是一种优化

  • 相关阅读:
    HDU-1561
    POJ 1088
    UESTC-878
    CodeForces
    HDU 5753
    HDU 1568
    二分图入门题
    二分图匹配入门题
    树形dp入门
    UVA
  • 原文地址:https://www.cnblogs.com/liuyangfirst/p/6535286.html
Copyright © 2011-2022 走看看