background image

Method-Based Injection

<< Field-Based Injection | Class-Based Injection >>
<< Field-Based Injection | Class-Based Injection >>

Method-Based Injection

package com.example;
public class SomeClass {
@Resource(name=
"customerDB")
private javax.sql.DataSource myDB;
...
}
In the code above, the JNDI name is customerDB, and the inferred type is
javax.sql.DataSource.class
.
Method-Based Injection
To use method-based injection, declare a setter method and decorate it with the @Resource
annotation. The container will infer the name and type of the resource if the name and type
elements are not specified. The setter method must follow the JavaBeans conventions for
property names: the method name must begin with set, have a void return type, and only one
parameter. If you do specify the type element, it must match the field's type declaration.
package com.example;
public class SomeClass {
private javax.sql.DataSource myDB;
...
@Resource
private void setMyDB(javax.sql.DataSource ds) {
myDB = ds;
}
...
}
In the code above, the container infers the name of the resource based on the class name and the
field name: com.example.SomeClass/myDB. The inferred type is
javax.sql.DataSource.class
.
package com.example;
public class SomeClass {
private javax.sql.DataSource myDB;
...
@Resource(name=
"customerDB")
private void setMyDB(javax.sql.DataSource ds) {
myDB = ds;
}
Resource Injection
Chapter 34 · Resource Connections
1013