我创建了一个库,在其中创建了一些bean。以下是我正在创建一些bean的文件:
@Configuration
public class StorageBindings {
@Value("${storageAccountName}")
private String storageAccountName;
@Value("${storageAccountKey}")
private String storageAccountKey;
@Bean(name = "cloudBlobClient")
public CloudBlobClient getCloudBlobClientUsingCredentials() throws URISyntaxException {
return new CloudBlobClient();
}
@Bean(name = "storageCredentialsToken")
public StorageCredentialsToken getStorageCredentialsToken() throws IOException {
return new StorageCredentialsToken();
}
@Bean(name = "msiTokenGenerator")
public MSITokenGenerator getMSITokenGenerator() {
return new MSITokenGenerator();
}
}
然后我创建了该类,将其用作入口点以进行进一步的操作
public class StorageClient {
@Autowired
private CloudBlobClient cloudBlobClient;
@Autowired
private MSITokenGenerator msiTokenGenerator;
@Value("${storageAccountName}")
private String storageAccountName;
@Value("${storageAccountKey}")
private String storageAccountKey;
}
我用上面的文件创建了jar,并将其包含在我们的主项目中,在其中创建了StorageClient的bean,如下所示:
@Bean(name = {"storageClient"})
public StorageClient getStorageClient() {
LOG.debug("I am inside storage class");
StorageClient ac = null;
try {
ac = new StorageClient();
return ac;
}
但是执行后,我发现在StorageClient实例ac中没有注入以下变量,甚至没有反映环境属性,并且所有这些都为空:
//beans NOT Injecting
ac.cloudBlobClient=null;
ac.msiTokenGenerator=null;
//env variables
ac.storageAccountName=null;
ac.storageAccountKey=null;
我错过了什么吗,因为我越来越空了。实例化bean的顺序还可以。我检查了。因此,首先创建了StorageBindings的bean。
答案 0 :(得分:3)
执行此操作时:
ID,Name,Gender
101,X,M
102,Y,F
您丢失了spring的上下文,因为您是根据该上下文创建一个新实例。 ac = new StorageClient();
,CloudBlobClient
和变量MSITokenGenerator
,storageAccountName
中的bean不会被注入。
您可以用storageAccountKey
注释StorageClient
。
因此,由于将其打包为jar,因此在主项目中必须确保@Component
包含@ComponentScan
所在的路径。
那么您可以做:
StorageClient
在您的主项目中。
答案 1 :(得分:2)
如果要在带有注释的方法class Class_teacher(models.Model):
first_name = models.CharField(max_length=200)
last_name = models.CharField(max_length=200)
standard = models.IntegerField()
division = models.CharField(max_length=1)
subject = models.CharField(max_length=200)
email = models.CharField(max_length=30)
class Student(models.Model):
first_name = models.CharField(max_length=200)
last_name = models.CharField(max_length=200)
classteacher = models.ForeignKey('Class_teacher', on_delete=models.SET_NULL,blank=True, null=True )
中创建对象,则自动装配不会在其中注入bean-您只是在自己创建对象。
因此,您必须@Bean
,即在@Autowire
类中的字段上,并使用setter / constructor进行设置。
即:
Configuration