zoukankan      html  css  js  c++  java
  • Spring根据XML配置文件注入对象类型属性

    这里有dao、service和Servlet三个地方

    通过配过文件xml生成对象,并注入对象类型的属性,降低耦合

    dao文件代码:

    package com.swift;
    
    public class DaoUser {
        public void fun() {
            System.out.println("I'm  dao's fun()....................");
        }
    }

    service文件代码:(提供setter方法,xml文件可通过这种方法配置)

    package com.swift;
    
    public class ServiceUser {
        private DaoUser daoUser;
        
        public void setDaoUser(DaoUser daoUser) {
            this.daoUser = daoUser;
        }
    
        public String fun() {
            System.out.println("I am Service's fun()..............");
            return daoUser.fun();
        }
    }

    xml文件代码:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!-- IoC 控制反转 Spring根据XML配置文件注入对象类型属性 -->
    <bean id="dao" class="com.swift.DaoUser"></bean>
    <bean id="service" class="com.swift.ServiceUser">
    <property name="daoUser" ref="dao"></property>
    </bean>
    </beans>

    Servlet类文件可以绕开dao的文件,直接使用service即可

    package com.swift;
    
    import java.io.IOException;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    @WebServlet("/duixiang")
    public class ServletService extends HttpServlet {
        private static final long serialVersionUID = 1L;
        public ServletService() {
            super();
        }
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.getWriter().append("Served at: ").append(request.getContextPath());
            @SuppressWarnings("resource")
            ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
            ServiceUser service=(ServiceUser) context.getBean("service");
            response.getWriter().append(service.fun());
        }
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    
    }

    中间因修改属性名字,而忽略修改setter方法名字导致出错,已改好,错误的类型记录了一下:

    Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'daoUser' of bean class [com.swift.ServiceUser]: Bean property 'daoUser' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
    提示的很好,要不自己很难发现。

  • 相关阅读:
    使用策略模式减少if else
    php 向二维数组中追加元素
    svn update 产生Node remains in conflict的问题
    php对ip地址的处理
    php 对比两个数组中的值是否相等
    jquery 通过attr获取属性只有一个值的解决
    php 一维数组去重
    调整ceph的pg数(pg_num, pgp_num)
    linux-Centos 7下bond与vlan技术的结合[推荐]
    centos 配置vlan
  • 原文地址:https://www.cnblogs.com/qingyundian/p/7825587.html
Copyright © 2011-2022 走看看