发表于: 2018-03-25 20:56:33

2 425


一回试着传一下代码吧,今天主要解决下面两个问题:

(1)idea中如何打jar包

今天试了一下idea中自带的打包功能,首先:

要在这里配置artifacts

指定主方法路径(必须有psvm,没有的话这个地方没法选就没法进行下一步,下面选项,第一个是打成一个包,第二个选项是不打那些依赖包,然后下面是MF文件指定路径),最后我没用IDEA自带的这个方法,因为一直打不成可以运行的jar包,我按照网上说的把mf文件放在resources文件夹下面但是生成的jar包中的mf文件的class  path这个主方法指定路径会被吞掉(之前明明设置好了),然后我又试了一下全部打在一起,这样做虽然有了class path但是还是没法运行,试了一会之后我改成了通过maven打包,配置文件如下:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<useUniqueVersions>false</useUniqueVersions>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>Testtask1</mainClass>
</manifest>
</archive>
</configuration>
</plugin>

这里mainclass是你主方法路径,其他都是按网上设置的,这样打成jar包之后在本地运行会提示找不到log4j这个类(大概是jar包损坏?),图没截,提示是classDefoundException:../log4j/,然后注释掉所有日志文件之后成功找到主方法并且运行:

问题待解决,很麻烦;

(2)@autowire注解不能用在静态方法中

psvm主方法是一个静态方法,

通过autowire实现接口的自动装配然后生成一个可以运行接口中的方法的实体类代码如上,注意,这里不能声明成static。

我没有写dao的实现类,通过配置接口的xml文件以及spring配置中的如下语句实现了自动装配:

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="mapper"/>
</bean>

这个bean设置可以起到自动扫描的作用,让sql语句直接和dao联系到了一起,省去了自己写接口实现类的麻烦,那么我该如何在psvm中调用我通过@autowire生成的实体类呢?

在java语言中,静态方法是不能引用非静态变量的,注意静态方法是属于静态类,静态类优先加载,非静态变量在静态类之后加载,如果在静态方法初始化过程中引用非静态变量那这个非静态变量实际上还没有生成,会抛出一个空指针异常,但是spring的自动装配是发生在静态类家在之前的,那么我直接在静态方法之前已经装配了,为什么还不能调用呢?(一开始我就是觉得可以调用,不过结果不会说谎的)

那他说不能被引用,我就换一种方式试图解决这个问题,代码如下:

这里@Component起到的作用是让spring把这个类作为bean加载

@PostConstruct下面的语句会在执行主方法之前就运行,在这里我声明了一个实体类(工具类)去调用工具类下面的studentMapper(实体方法),看样子是可以了,不过运行:

还是会报空指针错误,去网上查,按他们的思路改了一下代码,依然报空指针错误 ,这时我想到了可能是我spring中的配置文件没有扫描这个包下的类,如果不扫描那么@Component、@PostConstruct这些注解全部都无效,配置如下:


扫描test包下面的文件,让注释起作用,运行,本来以为自己没有白花时间去解决问题,但是结果还是报空指针异常,试着去国外网站搜了一下,很多人都说不要用静态方法,那么任务一的要求是:运行main方法跑通程序,我的main方法无法直接引用接口层方法那么就意味着我要多写一个继承该接口的实现类来引用?(可以去掉自动装配)那么我能否让这个项目没有主方法,只通过mvn跑test程序呢?或者说如何在静态方法中实现spring的自动装配?

今天就这两个问题,忙了一天都没解决任何一个,挺难受的。

刚刚重新读了一遍任务一发现自己可能理解错意思了...如果只用mybanits框架,建立一个接口和一个接口实现类,然后在主函数中调用是没有问题的,我多加了一个spring进去,不知道用不用修改一下我的代码呢?代码已经上传了。Testtask1是我的测试单元(我java项目中没有自己建立数据库和表的配置,需要在本地自己建立一个数据库emp,表的名字是student 表段为id、name、age,如果需要在java项目中直接建立数据库那我就再改一下配置文件)


返回列表 返回列表
评论

    分享到