31 Ekim 2018 Çarşamba

SpringContext @Required Anotasyonu

Giriş
Açıklaması şöyle.
The @Required annotation is a method-level annotation and applied to the setter method of a bean.

This annotation simply indicates that the setter method must be configured to be dependency-injected with a value at configuration time.

SpringContext @DependsOn Anotasyonu

Giriş
Açıklaması şöyle.
The@DependsOn annotation can force Spring IoC containers to initialize one or more beans before the bean, which is annotated by the  @DependsOn annotation.

The @DependsOn annotation may be used on any class directly or indirectly annotated with the  @Component or on methods annotated with the @Bean.


SpringContext @Primary Anotasyonu

Giriş
Açıklaması şöyle
We use the  @Primary to give higher preference to a bean when there are multiple beans of the same type.
Örnek
Elimizde bir Configuration sınıfı olsun. Aynı arayüzü gerçekleştiren iki bean var.
@Configuration
public class ConfigClass {
  @Bean(name="normalBean")
  @Primary
  public MyBeanInterface getNormalBeanInterface() {
    return new MyBeanInterfaceImpl();
  }

  @Bean(name="specialBean")
  public MyBeanInterface getSpecialBeanInterface() {
    return new MyBeanInterfaceForMyAnnotation();
  }
}
Şöyle yaparız. normalBean @Primary olarak işaretli olduğu için specialBean'e tercih edilir.
public class MyController {
  @Autowired
  private MyBeanInterface base;
}

SpringContext @ImportResource Anotasyonu

Giriş
Şu satırı dahil ederiz.
import org.springframework.context.annotation.ImportResource;
Açıklaması şöyle.
Spring provides an @ImportResource annotation used to load beans from an applicationContext.xml file into an ApplicationContext.
Elimizde eskiden kalan bir bean tanımlarının olduğu xml varsa bu dosyanın yüklenmesini sağlar. @Configuration ile kullanılabilir.

Örnek
Şöyle yaparız.
@Configuration
@ImportResource("/another.xml")
class XmlImportingConfiguration {
}
Örnek
Şöyle yaparız.
@SpringBootApplication
@EnableBatchProcessing
@EnableCaching
@ImportResource("classpath:analytics-batch-test.xml")
public class AnalyticsApplication {
  ...
}
Örnek
Elimizde bir yaml olsun
config:
  location: file:///config.xml
Şöyle yaparız.
@ImportResource("${config.location}")


SpringMail SimpleMailMessage Sınıfı

Giriş
Şu satırı dahil ederiz
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
Açıklaması şöyle.
It provides help in creating a simple mail message including from, to, cc, subject, etc.
MailMessage arayüzünden kalıtır. Bu arayüzden kalıtan bir diğer sınıf ise MimeMailMessage sınıfı.

Bu sınıfın from,to,subject,text alanları doldurulur ve JavaMailSender sınıfı ile gönderilir.

Tanımlama
Şöyle yaparız.
<bean id="simpleMailMessage"
  class="org.springframework.mail.SimpleMailMessage">

  <property name="from" value="from@no-spam.com" />
  <property name="to" value="to@no-spam.com" />
  <property name="subject" value="Testing Subject" />
  <property name="text">
    <value>
      <![CDATA[
        Dear %s,
        Mail Content : %s
      ]]>
    </value>
  </property>
</bean>
setTo metodu
Örnek
Şöyle yaparız
@Component
public class SendMail {
  @Autowired
  JavaMailSender mailSender;
  public void sendMailToOneReceiver(String email, String msg){
    try{
      SimpleMailMessage mailMsg= new SimpleMailMessage();
      mailMsg.setTo(email);
      mailMsg.setSubject("Party Invitation (Test Mail)");
      mailMsg.setText(msg);
      mailSender.send(mailMsg);
    } catch(Exception e){
...
    }
}

SpringSecurity UserDetailsManager Arayüzü

Giriş
Bu arayüzü gerçekleştiren InMemoryUserDetailsManager,JdbcUserDetailsManager, LdapUserDetailsManager gibi sınıflar var.

30 Ekim 2018 Salı

SpringMVC ClientHttpRequestInterceptor Arayüzü

Giriş
Şu satırı dahil ederiz.
import org.springframework.http.HttpRequest;
import org.springframework.http.client.ClientHttpRequestExecution;
import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.http.client.ClientHttpResponse;
RestTemplate sınıfının gönderdiği cevaba otomatik olarak bir HTTP header değeri atamak için kullanılabilir.
Örnek
Şöyle yaparız.
this.restTemplate = new RestTemplate();
this.restTemplate.getInterceptors().add(myInterceptor());
intercept metodu
Elimizde şöyle bir kod olsun.
String accessToken = ...;
Şöyle yaparız.
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] bytes,
  ClientHttpRequestExecution execution) throws IOException {
  request.getHeaders().add("Authorization", "Bearer " + accessToken);
  return execution.execute(request, bytes);
}


SpringData @Procedure Anotasyonu

Giriş
Parametre isimleri stored procedure'daki parametre isimler ile aynı olmalı.
Örnek
Şöyle yaparız.
@Procedure
void password_change_web(Integer idUsuarioInt, String password);