最初のステップは、Maven プロジェクトを作成することです。Spring も Maven に基づいています。
2 番目のステップは、Maven プロジェクト (spring-context) に Spring サポートを追加することです。 、spring-beans)
pom.xml
ファイルに依存関係を追加します。
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>5.2.3.RELEASE</version> </dependency> </dependencies>
更新して、読み込みが完了するまで待ちます。
3 番目のステップは、簡単なテスト用のスタートアップ クラスと main を作成することです
Java ディレクトリにクラスを作成してコードを記述するだけです。ここでは Spring プロジェクトの作成方法と Spring の簡単な使用方法を紹介するだけなので、Tomcat などには依存しません。Main クラスを直接記述する方が直感的です。
外部ソースは不安定なため、2 番目のステップで Spring 依存関係を導入すると失敗する可能性があるため、以下に国内ミラーの設定方法を説明します。ソース。
既製の settings.xml ファイル リンク:
アドレス 1
アドレス 2:抽出コード:9thv
既に設定ファイルがあるが、mirror
の設定を行っていない場合の設定内容は、
<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>
スプリング構成ファイルの追加 (初回のみ必要。初めてではない場合、この手順は無視できます)
右-リソース ディレクトリをクリックし、新しい .xml
構成ファイルを作成します。ファイル名は spring.xml
または spring-config.xml
にすることをお勧めします。
spring.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"> </beans>
最初のステップは、# を作成することです。 # #Beanオブジェクト。
User オブジェクトを挿入する場合は、まず
User クラスを作成します。
package com.bean; public class User { public void sayHi(String name) { System.out.println("你好!" + name); } }
Bean を Spring に注入します。つまり、Spring 構成ファイル内の次のステートメントを通じてそれを注入します。
<bean id="user" class="com.bean.User"></bean>
key は
id、
value は
class 。
id は、
userid などの小さなキャメルケースの名前を使用します。
class は、
などの大きなキャメルケースの名前を使用します。ユーザーID### 。 2.3 Bean オブジェクトの読み取り
オブジェクトを読み取りたい場合は、まず Spring コンテキスト オブジェクトを取得する必要があります。これは Spring を取得するのと同じです。次に、スプリング コンテキスト オブジェクトによって提供されるメソッドを通じて、使用する必要がある Bean
オブジェクトを取得します。最後に、Bean
オブジェクトを使用できます。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:java;">import com.bean.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
//1.得到上下文对象
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
//2.获取bean对象,此处是根据id获取
User user = (User) context.getBean("user");
//3.使用bean
user.sayHi("zhangsan");
}
}</pre><div class="contentsignin">ログイン後にコピー</div></div>
実行結果:
プロセスは終了コード 0で終了しました
Beanファクトリー(古い) Bean を取得します。
import com.bean.User; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.ClassPathResource; public class Main2 { public static void main(String[] args) { //1.得到Bean工厂 BeanFactory factory = new XmlBeanFactory(new ClassPathResource("spring.xml")); //2.获取Bean User user = (User) factory.getBean("user"); //3.使用 user.sayHi("李四"); } }
Bean ファクトリーですが
実行結果:
Hello! Li SiApplicationContext# で終了しました## とプロセスは終了コード 0
Discovered
BeanFactory はコンテナから
Bean を取得でき、どちらも
getBean メソッドを提供します。すると、
ApplicationContext と # で問題が発生します。 ##BeanFactory
違いは何ですか? 同じ点: どちらもコンテナから
Bean
を取得でき、両方とも
メソッドを提供します。 違い:
の親クラスであり、 BeanFactory
は Basic のみを提供しますBean
オブジェクトの関数と ApplicationContext
へのアクセスは、 BeanFactory
のすべての関数に加えて、国際化などの他の追加関数の実装もあります。 、リソースアクセスおよびその他の機能が達成されます。 これはパフォーマンスの点で異なります。
(これは遅延方法です)。ApplicationContext
これはハングリーな方法です。作成時にすべての Bean
がロードされ、すぐに使用できるようになります。 ############証明する:###
我们在bean目录下添加一个Blog
类,并完善Blog
与User
类的构造方法,当类被构造时会发出一些信号,在获取上下文或工厂时根据这些信号让我们感知到它是否会被构造。
import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Main3 { public static void main(String[] args) { //1.得到上下文对象 ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); } }
运行结果:
ApplicationContext创建时,会将所有的对象都构造,饿汉的方式。
import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.ClassPathResource; public class Main4 { public static void main(String[] args) { //1.得到Bean工厂 BeanFactory factory = new XmlBeanFactory(new ClassPathResource("spring.xml")); } }
BeanFactory创建时,什么都没有,说明是懒汉的方式。
ApplicationContext
中的多种getBean
方法:
方法1:根据 bean name
获取bean
。
User user = (User) context.getBean("user");
方法2:根据bean type
获取bean
。
User user = (User) context.getBean(User.class);
只有beans中只有一个类的实例没有问题,但是个有多个同类的实例,会有问题,即在spring中注入多个同一个类的对象,就会报错。
我们来试一试,首先在Spring配置文件,注入多个User
对象:
然后我们再通过这种方式来获取对象,我们发现报错了,报错信息如下:
Exception in thread "main" org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'com.bean.User' available: expected single matching bean but found 3: user,user1,user2
抛出了一个NoUniqueBeanDefinitionException
异常,表示注入的对象不是唯一的。
方法3:综合上述两种,可以根据bean name
与bean type
来获取bean
相比方法1,更加健壮。
User user = context.getBean("user", User.class);
以上がJava Springフレームワーク作成プロジェクトとBeanストレージと読み込み例の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。