あなたのフィールド(hastName、ポート、ユーザー、パスワード)はサーバー構成のようなプロパティファイルから来ると仮定します。
@Component
public class SomeClass {
@Autowired
public someclass(@Value("${server.hostName}") String hostName, @Value("${server.port}") int port, @Value("${server.user}") String user, @Value("${server.passowrd}") String password) {
this.user = user;
this.password = password;
}
}
パラメータが静的な値でない場合は、プログラム的な方法を使用します。 Beanのインスタンスを作成する前に、アプリケーションコンテキストをオートワイヤリングする必要があります。
@Autowired
private ApplicationContext ctx;
次に、あなたのBeanのスコープを扱うながら
BeanDefinitionRegistry registry = ((BeanDefinitionRegistry) ctx.getFactory());
GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
beanDefinition.setBeanClass(SomeClass.class);
beanDefinition.setLazyInit(false);
beanDefinition.setAbstract(false);
beanDefinition.setAutowireCandidate(true);
beanDefinition.setScope("singleton"); // you should deal your scope.
ConstructorArgumentValues constructor = beanDefinition.getConstructorArgumentValues();
constructor.addIndexedArgumentValue(0, hostName);
constructor.addIndexedArgumentValue(1, port);
constructor.addIndexedArgumentValue(3, user);
constructor.addIndexedArgumentValue(4, password);
String beanName = "someclass"; // give a name to your bean
BeanComponentDefinition definition = new BeanComponentDefinition(beanDefinition, beanName);
BeanDefinitionReaderUtils.registerBeanDefinition(definition, registry);
は注意してください、あなたのBeanインスタンスを作成し、アプリケーションコンテキストにそれを登録します。あなたは、あなたの構造に応じてリクエストまたはセッションスコープを使用することができます。
最後に、他のクラスでもSomeClassをオートワイヤできます。
@Autowired
public SomeClass someClass;
いいえ。これはデータベースに関連していないので、プロパティーファイルからは来ません。したがって、これらは本質的に動的であり、Javaから渡されます。 – Souvik
Hummは、サーバーの起動時にこのスプリングBeanを作成できないことを意味します。コンポーネントスキャンは使用できません。したがって、実行時にこのクラスのインスタンスを作成し、プログラムでSpringアプリケーションコンテキストに登録する必要があります。あなたが望むなら、私はそれについてのより多くの情報を与えることができます。しかし、私はあなたが注釈でそれを行うことはできないと信じています。 – nsylmz
私は多くの情報が私にとって非常に役立つと思います。だから、私が持っているコメントのみのオプションによると、 "新しい"演算子で手動で行うことです。 – Souvik