Java 使用对方在春季编写的包
因此,我尝试使用的软件包如下:Java 使用对方在春季编写的包,java,spring,javabeans,Java,Spring,Javabeans,因此,我尝试使用的软件包如下: https://github.com/spring-projects/spring-batch-extensions/tree/master/spring-batch-excel 在该页面上是该包的Springbean配置。我是spring的新手,不知道如何实际编写使用bean的代码。 配置如下所示: @Bean public PoiItemReader excelReader() { PoiItemReader reader = new PoiItemR
https://github.com/spring-projects/spring-batch-extensions/tree/master/spring-batch-excel
在该页面上是该包的Springbean配置。我是spring的新手,不知道如何实际编写使用bean的代码。
配置如下所示:
@Bean
public PoiItemReader excelReader() {
PoiItemReader reader = new PoiItemReader();
reader.setResource(new ClassPathResource("/path/to/your/excel/file"));
reader.setRowMapper(rowMapper());
return reader;
}
@Bean
public RowMapper rowMapper() {
return new PassThroughRowMapper();
}
@Configuration
public class MyConfiguration {
@Bean
public A a(B b) {
return new A(b);
}
@Bean
public B b() {
return new B();
}
}
因此,如果我在某处有另一个名为reader的类,我如何使用这个bean配置从excel文件中获取POITEMReader从.setRowMapper()
获取的行
行映射器有一个数组列表,用于拆分excel行中的值,但我不知道如何获取该列表
我是否调用excelReader()方法
POITEMReader没有任何与之关联的有用方法,因此我认为我不应该这样做。您应该在要读取文件的类上声明@Service或@Component,并使用@Autowired注释来使用POITEMReader
@Service
public class SomeclassName {
@Autowired
private PoiItemReader excelReader;
public void somemethod() {
//do some reading stuff here using excelReader
}
}
从代码片段来看,您似乎正在声明bean的类上使用
@Configuration
使用Java配置是定义bean的方法之一,这样spring就可以理解它们并在运行时注入属性。
另一种方法是使用注释,如@Service、@Component、@Controller
等等(答案由maneesh提供)
因此,在Spring中首先要了解的是,有许多配置方法(还有一种老方法,使用XML和基于Groovy的配置)
现在,当您编写一个spring应用程序时,通常使用其他springbean中的springbean
所以,如果您将bean A配置为在bean B上有一个引用,Spring将为您注入它。例如:
public class A {
private B b;
public A(B b) {
this.b = b;
}
public void doSomething() {
b.foo();
}
}
public class B {
public void foo() {...}
}
定义这些bean的“java配置”方式如下所示:
@Bean
public PoiItemReader excelReader() {
PoiItemReader reader = new PoiItemReader();
reader.setResource(new ClassPathResource("/path/to/your/excel/file"));
reader.setRowMapper(rowMapper());
return reader;
}
@Bean
public RowMapper rowMapper() {
return new PassThroughRowMapper();
}
@Configuration
public class MyConfiguration {
@Bean
public A a(B b) {
return new A(b);
}
@Bean
public B b() {
return new B();
}
}
在您的示例中,您对配置使用了另一种语法(linereader.setRowMapper(rowMapper());
:
@配置
公共类MyConfiguration{
@Bean
public A a() {
return new A(b());
}
@Bean
public B B() {
return new B();
}
}
从A来看,您似乎只调用了一个创建B的方法。但事实并非如此,spring应该将您的配置包装在某种运行时代理中,例如,如果您多次调用B()
(对于许多bean),它将始终返回相同的实例,因为B有一个单例作用域。所有配置类中的All-in-All应该被视为创建bean的Java DSL,而不是常规代码
现在考虑的最后一个问题是所有这些配置都是从哪里开始的。这个问题的答案取决于运行的环境。通常,Spring已经集成到Tomcat或其他服务器上运行的现有项目中,或者如果它是Spring Bug应用程序,它已经提供了“众所周知的”。集成方式。所以你可以从你的项目中询问某人(我认为这不是家庭作业或其他事情)你的应用程序是如何与spring集成的,这超出了这个问题的范围。
所以我遇到的问题是,POITEMReader中的所有方法要么是受保护的,要么是设置器,所以我实际上无法对该读取器做任何事。我可以找到的所有教程都停留在配置上,但我看不到任何方法可以真正实现在git hub存储库中有一个名为Poiseet的类,它似乎很有用,它有公共方法,PoItemReader中的一个受保护的方法返回一个表。我所能想到的就是尝试编辑jar,使该方法公开,看看我是否可以用它做些什么。你能看一下这是教程吗我很困惑。它在返回条目读取器时停止,但我不知道如何处理返回的条目读取器,因为没有任何有用的方法与之关联。