Arten von Anmerkungen zu Spring DI
Context Configuration Annotations @Scope @Autowired @Resource @Inject @Required @Named @Order @PostConstruct @PreDestroy
@Scope
Im Allgemeinen wird nur eine Bean, die automatisch mit @Component @Service @Repository scannt, als Singleton generiert. Sie können dies jedoch mithilfe der @ Scope-Annotation ändern. Mit anderen Worten, ich werde den Bohnenbereich einstellen.
Singleton gibt eine Bean pro "IoC-Container" zurück Prototyp - Erstellt jedes Mal eine neue Bean, wenn eine Anfrage vorliegt, und kehrt zurück request gibt eine Bean pro "HTTP-Anforderungsobjekt" zurück Sitzung gibt eine Bean pro "HTTP-Sitzungsobjekt" zurück globalSession-Gibt eine Bean für "alle Sitzungen" zurück
Example
@Component
@Scope("prototype")
Class Hoge { ... }
<bean id="hoge" class="aaa.java.bbb.ccc.hoge" scope="prototype" />
Wenn Sie eine Bean injizieren, können Sie die folgenden Anmerkungen verwenden.
@Autowired
Anmerkungen zum Spring Framework Wenn die Bean-ID oder der Bean-Name übereinstimmen, wenden Sie an. Typ Driven Injection Wenn einige Beans durchsucht werden, werden sie durch die Annotation "@Qualifier (name =" hoge ")" unterschieden. Grundsätzlich werden allen Attributen, die @Autowired sind, Beans injiziert.
@Resource
Anmerkungen, die in Spring 2.5 und höher verwendet werden können und nicht zum Spring Framework gehören
Suchen Sie die Bohne, die durch den Bohnennamen injiziert wird. Fügen Sie dazu die JSR.250-Bibliothek jsr250-api.jar
zum Klassenpfad hinzu.
Maven-Einstellungen
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>jsr250-api</artifactId>
<version>1.0</version>
</dependency>
@Inject
Es kann mit Spring 3.0 oder höher verwendet werden. Es wird empfohlen, @Inject zu verwenden, um Apps zu konfigurieren, die nicht zu einem bestimmten Framework gehören. Fügen Sie dazu "javax.inject-x.x.x.jar" aus der JSR.330-Bibliothek zum Klassenpfad hinzu.
Maven-Einstellungen
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
@Required
Es wird verwendet, um über die Setter-Methode zu schreiben und die erforderlichen Eigenschaften festzulegen. Um es zu verwenden, können Sie entweder die RequiredBeannotationBeanPostProcessor-Klasse als Bean registrieren oder die Einstellung <context.annotation-config> hinzufügen.
Example
package day1;
public class Emp {
private String ename;
@Requried
public void setEname( String ename ) { this.ename = ename; }
public String getName() { return this.ename; }
}
Beans.xml
<bean id="emp" class="day1.Emp" >
<!--Fehler, wenn die folgenden Eigenschaften nicht festgelegt sind-->
<!-- <property ename="ename" value="hoge" /> -->
</bean>
main()
ApplicationContext ctx = new ClassPathXmlApplicationContext("Beans.xml");
Emp emp = (Student) ctx.getBean("emp");
System.out.println("Ename : " + emp.getEname());
Wenn ich es ausführe, wird folgende Fehlermeldung angezeigt:
>
#### **`Error`**
```ruby
Property 'ename' is required for bean 'emp'
Ich bin etwas müde@Named @Order @Über PostConstruct morgen ...
Recommended Posts