spring框架如何加载外部jar包中的类

shengwubin
  • 227

问题描述

这两天在学习spring框架,有一个问题困扰了我很久,希望在这里能得到解答。

目前状况

目前的程序是可以运行的,项目文件的结构是这样的:
图片描述

UserDao的代码如下:

package com.rl.spring.dao;

public interface UserDao {
    void test();

}

UserDaoImpl的代码如下:

package com.rl.spring.dao.impl;

import com.rl.spring.dao.UserDao;

public class UserDaoImpl implements UserDao {
    public void test(){
        System.out.println("userDaoImpl test success");
    }

}

配置文件ApplicationContext.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-4.3.xsd">
        <bean id="userDao" class="com.rl.spring.dao.impl.UserDaoImpl" ></bean>
</beans>

我创建了一个单元测试,代码如下:

package com.rl.spring.test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.event.ApplicationContextEvent;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.rl.spring.dao.UserDao;
public class TestSpring {
    @Test
    public void test(){
        ApplicationContext ctx = new ClassPathXmlApplicationContext("ApplicationContext.xml");
        UserDao obj = (UserDao) ctx.getBean("userDao");
        obj.test();
    }

}

到目前为止,一切都是十分顺利的。

问题

假设我自己的项目中只有一个基类UserDao,而UserDao的具体实现UserDaoImpl则是别人写的,他把生成的jar包发给我,那我怎么样才能不修改我的代码,直接修改配置文件ApplicationContext.xml,就能加载别人写的类,在我的程序中生成UserDaoImpl对象呢?

回复
阅读 14.1k
2 个回答

我看你的项目没有使用包依赖管理工具
具体可以采用下面的方式:

1 首先你必须将别人的jar包引入到自己项目的classpath当中。
2.1 如果别人的类有相应的注解,例如
@Component@Controller@Repository@Service这样的spring注解和@Resource之类的javax注解。
则在ApplicationContext.xml中添加<context:component-scan base-package="xx.xx.xx"/>就可以引入。
xx.xx.xx是别人jar包中的包命名。
2.2 如果别人的类没有相应的注解,则在bean配置中class选择别人的类即可。
2.3 还有一种方法,就是你写一个包装类,将别人的类当作你包装类的属性,在bean配置中,采用property的方式引入。

可以在maven中添加相关的依赖。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏