我是Spring框架的新手.在我看到的大多数Spring教程中,Spring被描述为"非侵入性".
侵入性是什么意思?在Java中使用Spring有什么优点,是什么让它成为非侵入性的?
我在网上浏览一个春季mvc教程时复制了一个pom.xml,它有:
<!-- @Inject -->
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
根据我的理解,spring有自己的内置依赖注入,这会覆盖默认值并使用javax.inject吗?
我也在pom中看过slf4j,没有在代码或xml中进一步设置.
这是如何工作的,spring检查lib的文件夹,如果找到任何可覆盖的lib,它会这样做吗?
我是Java新手,我在网上寻找解决方案,但似乎都没有.请帮我.
我有两个文件.其中一个是包含main函数的java文件.在里面:
...
VaporVisitor visitor = new VaporVisitor();
...
Run Code Online (Sandbox Code Playgroud)
使用该命令,我想创建一个新对象VaporVisitor,它是一个名为的单独文件中的类VaporVisitor.java.但是,Java无法识别VaporVisitor是什么,可能是因为它不知道VaporVisitor.java存在(它位于同一目录中).我尝试将它们作为同一个软件包的一部分,在不同的软件包中导入...并且所有这些软件都失败了.谁能给我任何指导?
谢谢!
编辑:这正是我正在做的,以及我得到的错误消息:所以我有3个文件.V2VM(带有我的主要功能),VaporVisitor和提供的jar文件,它有几个自定义类.jar文件没有给我任何问题; 它试图让java识别VaporVisitor.
所以在V2VM(主要功能)中,我尝试过输入:import V2VM.java;哪个不起作用.我已经尝试将V2VM放在一个名为vv的子文件夹中,添加package vv;到VaporVisitor并放入V2VM.java import vv.*但这也不起作用.
为了编译,我试过了 javac -classpath [the jar file].jar V2VM.java
它给我的错误:
V2VM.java:15: cannot find symbol
symbol : class VaporVisitor
location: class V2VM
VaporVisitor visitor = new VaporVisitor();
^
V2VM.java:15: cannot find symbol
symbol : class VaporVisitor
location: class V2VM
VaporVisitor visitor = new VaporVisitor();
^
Run Code Online (Sandbox Code Playgroud)
当我运行javacc时,我与V2VM位于同一目录中,这也是其他两个文件所在的位置.我已经尝试将V2VM和VaporVisitor放在同一个包中,但这也不起作用.所以它们现在不属于任何包装......
编辑2:VaporVisitor和V2VM的源代码
V2VM.java:
package vv; //whether I …Run Code Online (Sandbox Code Playgroud) 我有代码@Inject在一个类中工作但在其他类中没有.这是我的代码:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation=" http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
">
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>
<context:component-scan base-package="com.myfashions.services"/>
<context:component-scan base-package="com.myfashions.dao"/>
</beans>
Run Code Online (Sandbox Code Playgroud)
public class SellerRetriever {
@Inject
UserDAO userDAO;
...
...
}
Run Code Online (Sandbox Code Playgroud)
UserDAO类存在于com.myfashions.dao包中.
@Inject在Seller.java中不起作用.有什么理由吗?
我正在尝试实施ContainerRequestFilter和方法filter。
如何从中提取路径参数ContainerRequest request?
我只能看到一种直接提取查询和表单参数的方法。
我正在使用 JSF + Spring+ Hibernate
protected @Inject ChartOfAccount chartOfAccount;
Run Code Online (Sandbox Code Playgroud)
chartOfAccount我基本上想从列表中填充
for (DistributionEntry de : getDistributionEntries()) {
chartOfAccount.setAccount(de.getAccount());
chartOfAccountList.add(chartOfAccount);
}
Run Code Online (Sandbox Code Playgroud)
对于每次迭代,我想要新的对象,chartOfAccount否则你知道列表包含具有最新值的相同对象。
解决方案一:使用 new 关键字 :-p
for (DistributionEntry de : getDistributionEntries()) {
ChartOfAccount coa= new ChartOfAccount();
coa.setAccount(de.getAccount());
chartOfAccountList.add(coa);
}
Run Code Online (Sandbox Code Playgroud)
解决方案二:applicationContext.getBean
for (DistributionEntry de : getDistributionEntries()) {
chartOfAccount= applicationContext.getBean(ChartOfAccount.class);
chartOfAccount.setAccount(de.getAccount());
chartOfAccountList.add(chartOfAccount);
}
Run Code Online (Sandbox Code Playgroud)
但我读过某些文章,以避免使用applicationContext.getBean
如果我避免使用applicationContext.getBean,处理这种情况的最佳方法是什么?两种行为都会相同吗?(ApplicationContext.getBean 与 new 关键字)
注意:我的托管bean是@Scope(“session”),模型是@Scope(BeanDefinition.SCOPE_PROTOTYPE),所以我们都知道,对于一个会话,它是单例,而不同会话的原型。