Spring 春天:正确学习道路上的困惑
在过去的几天里,我一直在自学SpringBoot,创建了一个RESTWeb服务服务器和客户端,然后添加了基本的身份验证,并部署为一个独立的war包。我通过整合Spring 春天:正确学习道路上的困惑,spring,spring-boot,Spring,Spring Boot,在过去的几天里,我一直在自学SpringBoot,创建了一个RESTWeb服务服务器和客户端,然后添加了基本的身份验证,并部署为一个独立的war包。我通过整合弹簧启动机web,弹簧启动机测试,弹簧启动机,弹簧启动机安全,弹簧启动机tomcat,弹簧启动机web,来实现这一点,jackson数据绑定在我的gradle项目中,通过各种网站复制和修改 在被众多网站以完全不同的方式(完全不同的注释,一些配置文件的使用)做事情弄糊涂之后,它工作了,然后我使用拦截器/消息转换器、原始标题,然后通过rest模
弹簧启动机web
,弹簧启动机测试
,弹簧启动机
,弹簧启动机安全
,弹簧启动机tomcat
,弹簧启动机web
,来实现这一点,jackson数据绑定
在我的gradle项目中,通过各种网站复制和修改
在被众多网站以完全不同的方式(完全不同的注释,一些配置文件的使用)做事情弄糊涂之后,它工作了,然后我使用拦截器/消息转换器、原始标题,然后通过rest模板生成器对其进行了修改
然而,我觉得我真的不知道它是如何工作的,也不知道为什么工作的,尽管我写了相当多的代码让它以4种不同的方式工作,包括基本身份验证。它只是神奇地工作了,我不喜欢它:例如,如果我想添加更多不基于“引导”的东西,我会怎么做,或者所有注释都在做什么,为什么需要它们,例如@SpringBootApplication
,@Configuration
,或者为什么有些类@Bean
,而其他类则不需要)
长话短说,spring是一个庞大的框架(列出软件包的网站本身占据了一个页面),我真的应该先学习SpringCore/framework,然后再学习boot,也许是SpringMVC或SpringWeb服务
我可以找到很多关于教我各种软件包的资源,但是没有一个能告诉我它们为什么工作或者从哪里开始,特别是没有什么能告诉我这些软件包是如何相互关联的。这是非常压倒性的
我预计这将因为没有建设性而被关闭,但它似乎是获得Spring答案的最佳场所。Spring框架它是关于依赖注入的,用于REST web服务,但这并不意味着在任何基本应用程序中都不能使用Spring 长话短说,spring是一个庞大的框架(列出软件包的网站本身占据了一个页面),我真的应该先学习SpringCore/framework,然后再学习boot,也许是SpringMVC或SpringWeb服务 您应该了解spring通常是如何工作的,以及实例化是如何工作的。基本上,它在您的项目中进行搜索,并实例化每个用
@Component
注释的类(@Service
,@RestController
,@Controller
…等等)。当您@Autowire
时,将向变量传递一个引用
在被众多网站以完全不同的方式(完全不同的注释,一些配置文件的使用)做事情弄糊涂之后,它工作了,然后我使用拦截器/消息转换器、原始标题,然后通过rest模板生成器对其进行了修改
你可以在互联网上找到的大多数超过1-2年的例子可能已经过时了(但并不总是如此)。当你寻找某样东西时,请记住这一点。这是实现如此之多的主要原因
我可以找到很多关于教我各种软件包的资源,但是没有一个能告诉我它们为什么工作或者从哪里开始,特别是没有什么能告诉我这些软件包是如何相互关联的。这是非常压倒性的
这是压倒性的。这是一个具有广泛适用性的大框架。了解事物如何运作的最佳场所是:一段非常短暂的春天历史
让我们从一节历史课开始。。。这一年是2002年,大多数Java开发人员都在J2EE领域工作,他们中的很多人都不高兴。其中一位是Rod Johnson,他写了一本书,名叫《如何在没有EJB的情况下以更好的方式开发企业应用程序》。这本书的代码成为了Spring框架的基础。p>
弹簧配置
让我们来看一个简单的Java类
@Component("hello")
public class HelloWorld {
private String name = "World!";
public void setName(String name) {
this.name=name;
}
public void sayHello() {
System.out.println("Hello, " + name);
}
}
Spring配置-属性文件
一开始,唯一的配置选项是使用属性文件。将此文件命名为应用程序上下文.properties
。要创建上面java类的实例并设置名称,需要应用程序context.properties
中的以下内容
hello.(class)=biz.deinum.samples.configurations.HelloWorld
hello.name=Marten!
(类)
是一个特殊属性(更像是(范围)
和(抽象)
,请参阅以获取更多选项。这将指示需要加载哪个类。要使用属性文件,必须创建一个BeanFactory
的过程。(如果您需要像AOP这样的奇特功能,则可以将其传递给ApplicationContext
)
然而,基于属性的配置有一点局限性,XML正在世界各地流行。因此,XML配置的第一步就诞生在哪里
Spring配置-XML文件(第1部分)
要用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.xsd">
<bean id="hello" class="biz.deinum.samples.configurations.HelloWorld">
<property name="name" value="Marten!" />
</bean>
</beans>
Spring配置-XML文件(第2部分)
XML非常冗长,但可读性很强。但是配置AOP(例如事务)、MVC等非常费力。(或者安全性之类的东西,请参阅没有名称空间的Spring security的前身)因此,新的和改进的XML具有名称空间的概念,允许像
这样的事情。Spring Boot看到这一点的原因之一
将类标记为@SpringBootApplication
将使该类成为@Configuration
,将启用组件扫描(从注释类所在的包开始),并启用自动配置
@SpringBootApplication
public class HelloApplication {
public static void main(String[] args) {
ApplicationContext context = SpringApplication.run(HelloApplication.class, args);
BeanFactoryHelper.sayHello(context);
BeanFactoryHelper.statistics(context);
}
@Bean
public HelloWorld hello() {
HelloWorld hello = new HelloWorld();
hello.setName("Marten!");
return hello;
}
}
这个类将启动应用程序,打招呼,打印一些上下文信息并结束
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory);
reader.loadBeanDefinitions("classpath:/applicationContext-basic.xml");
HelloWorld helloWorld = beanFactory.getBean("hello", HelloWorld.class);
helloWorld.sayHello();
<?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">
<context:component-scan base-package="biz.deinum.samples.configurations" />
</beans>
@Configuration
public class HelloWorldConfiguration {
@Bean
public HelloWorld hello() {
HelloWorld helloWorld = new HelloWorld();
helloWorld.setName("Marten!");
return helloWorld;
}
}
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(HelloWorldConfiguration.class);
context.getBean("hello", HelloWorld.class).sayHello();
@SpringBootApplication
public class HelloApplication {
public static void main(String[] args) {
ApplicationContext context = SpringApplication.run(HelloApplication.class, args);
BeanFactoryHelper.sayHello(context);
BeanFactoryHelper.statistics(context);
}
@Bean
public HelloWorld hello() {
HelloWorld hello = new HelloWorld();
hello.setName("Marten!");
return hello;
}
}