Configuration и xml

211
25 марта 2018, 21:00

Помогите, не могу разобраться. Я начал изучать Spring (IoC Concept), разобрал как можно конфигурировать бины через xml и отдельно через аннотации, но не пойму возможно ли создать бин в java-классе с аннотацией @Configuration и заполнить его поля, например, через сеттеры() в xml конфигурации?

Answer 1

Пример конфигурирования самого бина непосредственно при его инициализации в контексте, и да - нет, Вы не сможете через сеттеры с помощью хмл конфигурировать бин

@Bean
@ServiceActivator(inputChannel = "tcpOutChannel")
public TcpSendingMessageHandler tcpOut(AbstractServerConnectionFactory connectionFactory) {
    TcpSendingMessageHandler gateway = new TcpSendingMessageHandler();
    gateway.setConnectionFactory(connectionFactory);
    return gateway;
}
Answer 2

Дополню ответ от @GenCloud.

Можно сконфигурить бины (@Bean), если передать в параметры бина-метода значения из Spring-конфига или Spring-properties-файла.

На Spring это можно сделать через @Value. На SpringBoot это можно сделать через @ConfigurationProperties.

Примеры:

@Value("${group1.group2.param55:defaultValue}")
private String property;
@ConfigurationProperties("acme")
public class AcmeProperties {
    private boolean enabled;
    private InetAddress remoteAddress;
    private final Security security = new Security();
    public boolean isEnabled() { ... }
    public void setEnabled(boolean enabled) { ... }
    public InetAddress getRemoteAddress() { ... }
    public void setRemoteAddress(InetAddress remoteAddress) { ... }
    public Security getSecurity() { ... }
    public static class Security {
        private String username;
        private String password;
        private List<String> roles = new ArrayList<>(Collections.singleton("USER"));
        public String getUsername() { ... }
        public void setUsername(String username) { ... }
        public String getPassword() { ... }
        public void setPassword(String password) { ... }
        public List<String> getRoles() { ... }
        public void setRoles(List<String> roles) { ... }
    }
}

Пример прямой передачи параметров в @Bean:

@Bean
public MyClass myClass(@Value("${group1.group2.param55:defaultValue}") myProperty){
    return new MyClass(myProperty);
}

Подробнее можно почитать здесь:

Spring Boot features - Externalized Configuration

Reading a List from properties file and load with spring annotation @Value

READ ALSO
Запустить Java код в Python

Запустить Java код в Python

Можно ли запустить код, который написан на Java, из программы, которая написана на Python? Как, например, asm в c++А точнее, как из плагина на Питоне...

196
Java Eclipse - как сделать редактирование в консоли

Java Eclipse - как сделать редактирование в консоли

То есть пользователь видит Изменить имя: АлексейИ он может редактировать слово Алексей

203
Не запускается javac

Не запускается javac

Ребят, тут такая лажа, javac отказывается компилироватьЧто делать? Пробовал и javac и javac

167
Взаимодействие с Bash

Взаимодействие с Bash

Как в коде реализовать взаимодействие с оболочкой Bash?

163