Spring简单示例:在哪里创建JavaConfig中的bean列表?
我正在学习Spring,但我不知道我该在哪里填充我的结构。。。例如,我想要一个球队列表,每个球队都有一个球员列表 这是代码,我有我的团队应用程序:Spring简单示例:在哪里创建JavaConfig中的bean列表?,java,spring,spring-boot,spring-java-config,spring-bean,Java,Spring,Spring Boot,Spring Java Config,Spring Bean,我正在学习Spring,但我不知道我该在哪里填充我的结构。。。例如,我想要一个球队列表,每个球队都有一个球员列表 这是代码,我有我的团队应用程序: @SpringBootApplication public class TeamApplication { public static void main(String[] args) { SpringApplication.run(TeamApplication.class, args); Annotat
@SpringBootApplication
public class TeamApplication {
public static void main(String[] args) {
SpringApplication.run(TeamApplication.class, args);
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
Team team = context.getBean(Team.class);
Player player = context.getBean(Player.class);
}
}
然后是AppConfig:
@Configuration
public class AppConfig {
@Bean
public Team team() {
return new Team();
}
@Bean
public Player player() {
return new Player();
}
}
所以玩家是:
public class Player {
private static final Logger LOG = LoggerFactory.getLogger(Player.class);
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@PostConstruct
public void init() {
LOG.info("Player PostConstruct");
}
@PreDestroy
public void destroy() {
LOG.info("Player PreDestroy");
}
}
小组成员是:
public class Team {
private static final Logger LOG = LoggerFactory.getLogger(Team.class);
private String name;
private List<Player> listPlayer;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Player> getListPlayer() {
return listPlayer;
}
public void setListPlayer(List<Player> listPlayer) {
this.listPlayer = listPlayer;
}
@PostConstruct
public void init() {
LOG.info("Team PostConstruct");
}
@PreDestroy
public void destroy() {
LOG.info("Team PreDestroy");
}
}
然后我创建我的团队:
List<Person> l1 = new LinkedList<>();
l1.add(p1);
l1.add(p2);
Team t1 = new Team();
t1.setListPlayer(l1);
List<Person> l2 = new LinkedList<>();
l2.add(p3);
Team t2 = new Team();
t1.setListPlayer(l2);
List l1=新的LinkedList();
l1.添加(p1);
l1.添加(p2);
团队t1=新团队();
t1.设置列表播放器(l1);
列表l2=新的LinkedList();
l2.添加(p3);
团队t2=新团队();
t1.设置列表播放器(l2);
所以。。。春天:
- 我在哪里可以初始化我的玩家(在赛后我将得到相同的名字/年龄)
- 我在哪里创建我的列表团队?在TeamApplication中的getBean之后
亲切的问候 Spring并不是用来定义像Player和Team类这样的bean,它们基本上是pojo,在每个实例中可能会有所不同。SpringBean真正的亮点在于定义将注入其他Bean或组件(如控制器、服务或类似组件)的单例 也就是说,可以定义非单例的bean。只需将bean的范围更改为prototype,如下所示:
@Bean
@Scope("prototype")
public Team team() {
return new Team();
}
我在GitHub上创建了一个项目。我需要强调的是,这不是一个可用于生产的代码,您不应该遵循它的模式,因为我没有将其重构为美观、易懂和简单的代码
首先,你不必定义球队和球员的集合。正如您所说,数据将从DB加载,所以让用户完成这项工作。:)相反,您需要定义服务(作为Springbeans),这些服务包含供用户执行任务的业务逻辑
Spring是如何知道my db table结构和db table Java对象映射的?如果你想让你的团队和玩家保留一些db,你应该用Spring的注释来标记他们。在示例项目中,我将@实体
注释放在它们上面,这样Spring就知道它必须存储它们。Spring使用约定而不是配置,因此如果我没有定义任何db表名称,Spring将从实体类名称中生成一些名称,在本例中是PLAYER
、TEAM
和TEAM\u PLAYERS
。我还用以下注释注释了我想要存储的Java类字段:
:此字段将存储在DB列中。没有任何进一步的配置,Spring将生成其列的名称@Column
和@Id
:Spring将自动生成持久化实体的Id,并将其值存储在此注释字段中@GeneratedValue
:此注释告诉Spring在两个实体之间创建关系。由于此注释,Spring将创建@OneToMany
join表,并在其中存储TEAM player id对TEAM_PLAYERS
PlayerRepository
和TeamRepository
),它们扩展了CRUDepository接口,为它们提供了一些基本的CRUD操作,而无需进一步的工作
到目前为止还不错,但是用户如何使用这些服务呢?我已经通过HTTP端点(PlayerController
和TeamController
)发布了这些功能。我将它们标记为@RestController
s,因此spring会将一些HTTP查询映射到它们。通过它们,用户可以创建、删除、查找球员和球队,并将球员分配给球队或从球队中删除一名球员
如果您使用maven构建并启动它,并通过curl或导航到page向这些端点发送一些查询,则可以尝试此示例
我已经为这个项目做了更多的配置,但是从你的问题来看,这些都不相关。我没有更深入地解释这个项目,但是你可以对我的解决方案做一些调查,你可以在Spring的网站上找到文档
结论:
- 我的Spring管理课程是:
:@实体
,玩家
团队
:Repository
,PlayerRepository
TeamRepository
:@RestController
,PlayerController
TeamController
- 调用流程:
-(HTTP)->User
->@RestController
->存储库(实体)
DB
@Bean
@Scope("prototype")
public Team team() {
return new Team();
}