Java 自连线依赖项的注入

Java 自连线依赖项的注入,java,spring,spring-mvc,Java,Spring,Spring Mvc,我知道有几个类似的问题,但我仍然无法理解为什么我的示例不起作用 我有一个Spring MVC项目,其中我有一个控制器: @Controller public class StudentController { /** The Constant serialVersionUID. */ private static final long serialVersionUID = 1L; private static Logger log = Logger.getLog

我知道有几个类似的问题,但我仍然无法理解为什么我的示例不起作用

我有一个Spring MVC项目,其中我有一个控制器:

    @Controller
public class StudentController {

    /** The Constant serialVersionUID. */
    private static final long serialVersionUID = 1L;
    private static Logger log = Logger.getLogger(StudentController.class);

    @Autowired
    @Qualifier("studentsManager")
    IStudentsManager studentsManager;

    @Autowired
    @Qualifier("departmentsManager")
    IDepartmentsManager departmentsManager;
...
StudentsManager类:

@Transactional
@Repository
public class StudentsManager extends JdbcDaoSupport implements IStudentsManager {

    @Autowired
    @Qualifier("departmentsManager")
    private IDepartmentsManager departmentsManager;
...
    @Transactional
@Repository
public class DepartmentsManager extends JdbcDaoSupport implements
        IDepartmentsManager {

    /** The log. */
    private static Log log = LogFactory.getLog(DepartmentsManager.class);

    /** The departments. */
    private List<Department> departments = new ArrayList<Department>();


    public void addDepartment(int id, String name) {
        Department d = new Department(id, name);
        departments.add(d);
    }


    public void addDepartment(Department department)
            throws FileNotFoundException {
        if (log.isDebugEnabled()) {
            log.debug("Entered to add department method  ");
        }
        departments.add(department);
        StringBuilder sb = new StringBuilder();
        sb.append(department.toString()).append(" added");
        log.info(sb.toString());

        this.serialize();
    }

    public Department getDepartment(int departmentId) {
        if (log.isDebugEnabled()) {
            log.debug("Entered to getDepartment");
        }
        for (Department d : departments) {
            if (departmentId == d.getDepartmentId()) {
                return d;
            }
        }
        return null;
    }

    public Collection<Department> getAllDepartments() throws SQLException,
            ClassNotFoundException {
        if (log.isDebugEnabled()) {
            log.debug("Entered to getAllDepartments");
        }

        departments.clear();

        Class.forName("com.mysql.jdbc.Driver");
        String sql = "SELECT id, name FROM departments ORDER BY id";
        RowMapper<Department> rm = ParameterizedBeanPropertyRowMapper
                .newInstance(Department.class);
        return getJdbcTemplate().query(sql, rm);
    }

    public void serialize() throws FileNotFoundException {
        XStream xstream = new XStream();
        xstream.alias("departments", List.class);
        System.out.println(xstream.toXML(departments));
        FileOutputStream fos = new FileOutputStream("departments.xml", true); 
        xstream.toXML(departments, fos);
    }

    public void deserialize() throws FileNotFoundException {
        XStream xstream = new XStream();
        xstream.alias("departments", List.class);
        departments = (List<Department>) xstream.fromXML(new FileInputStream(
                "departments.xml"));
    }

}
DepartmentsManager类:

@Transactional
@Repository
public class StudentsManager extends JdbcDaoSupport implements IStudentsManager {

    @Autowired
    @Qualifier("departmentsManager")
    private IDepartmentsManager departmentsManager;
...
    @Transactional
@Repository
public class DepartmentsManager extends JdbcDaoSupport implements
        IDepartmentsManager {

    /** The log. */
    private static Log log = LogFactory.getLog(DepartmentsManager.class);

    /** The departments. */
    private List<Department> departments = new ArrayList<Department>();


    public void addDepartment(int id, String name) {
        Department d = new Department(id, name);
        departments.add(d);
    }


    public void addDepartment(Department department)
            throws FileNotFoundException {
        if (log.isDebugEnabled()) {
            log.debug("Entered to add department method  ");
        }
        departments.add(department);
        StringBuilder sb = new StringBuilder();
        sb.append(department.toString()).append(" added");
        log.info(sb.toString());

        this.serialize();
    }

    public Department getDepartment(int departmentId) {
        if (log.isDebugEnabled()) {
            log.debug("Entered to getDepartment");
        }
        for (Department d : departments) {
            if (departmentId == d.getDepartmentId()) {
                return d;
            }
        }
        return null;
    }

    public Collection<Department> getAllDepartments() throws SQLException,
            ClassNotFoundException {
        if (log.isDebugEnabled()) {
            log.debug("Entered to getAllDepartments");
        }

        departments.clear();

        Class.forName("com.mysql.jdbc.Driver");
        String sql = "SELECT id, name FROM departments ORDER BY id";
        RowMapper<Department> rm = ParameterizedBeanPropertyRowMapper
                .newInstance(Department.class);
        return getJdbcTemplate().query(sql, rm);
    }

    public void serialize() throws FileNotFoundException {
        XStream xstream = new XStream();
        xstream.alias("departments", List.class);
        System.out.println(xstream.toXML(departments));
        FileOutputStream fos = new FileOutputStream("departments.xml", true); 
        xstream.toXML(departments, fos);
    }

    public void deserialize() throws FileNotFoundException {
        XStream xstream = new XStream();
        xstream.alias("departments", List.class);
        departments = (List<Department>) xstream.fromXML(new FileInputStream(
                "departments.xml"));
    }

}
我总是在没有资格赛的情况下做这件事,而且总是很有效,但这次不行。所以我添加了这个注释,但仍然不起作用

看起来组件扫描不起作用,但我试着对它做一些修改,结果是一样的,所以我猜问题与它无关

web.xml文件:

    <?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    <!-- The definition of the Root Spring Container shared by all Servlets 
        and Filters -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
        /WEB-INF/spring/root-context.xml,
        /WEB-INF/spring/security.xml
        </param-value>
    </context-param>

    <!-- Creates the Spring Container shared by all Servlets and Filters -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- Processes application requests -->
    <servlet>
        <servlet-name>students</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>students</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>/</welcome-file>
    </welcome-file-list>

    <filter>
        <filter-name>charsetEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>charsetEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!-- Spring Security -->
    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>
                  org.springframework.web.filter.DelegatingFilterProxy
                </filter-class>
    </filter>

    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>

上下文配置位置
/WEB-INF/spring/root-context.xml,
/WEB-INF/spring/security.xml
org.springframework.web.context.ContextLoaderListener
学生
org.springframework.web.servlet.DispatcherServlet
上下文配置位置
/WEB-INF/spring/appServlet/servlet-context.xml
1.
学生
/
/
字符编码过滤器
org.springframework.web.filter.CharacterEncodingFilter
编码
UTF-8
字符编码过滤器
/*
springSecurityFilterChain
org.springframework.web.filter.DelegatingFilterProxy
springSecurityFilterChain
/*

您需要根据这些类的功能,使用@Component、@Repository或@Service为
StudentsManager
DepartmentsManager
添加注释


还要确保它们属于您在春季扫描的软件包。

您的Manager类上是否有
@Repository
注释?如果不添加它,请尝试aggain。我已经添加了@Repository注释,但仍然是pagacke
amg.net.controller
或“amg.net.services”中的类。您的bean是在应用程序上下文xml中声明的,因此应该可以找到它们。看起来您的xml处理不正确或级别不正确。它是如何在
web.xml
文件中声明的?root context.xml看起来像什么?好的,它解决了一点问题,但我仍然有:创建名为'departmentsManager'的bean时出错:调用init方法失败;嵌套的异常是java.lang.IllegalArgumentException:“需要数据源”或“jdbcTemplate”需要查看DepartmentsManager类这两个bean是用xml声明的,应该已经找到了。我已经编辑了我的帖子并添加了Departments Manager的完整实现我认为在中自动连接Departments Manager存在问题学生经理。我在那里添加了@qualifier注释,但没有帮助。