詳解註解方式的配置(09)
阿新 • • 發佈:2018-12-09
@Component的衍生註解
@Component
可以標註一個類成為Spring的bean,可適用於所有的類,但是無法區分Java EE開發中三層架構的層次,所以Spring提供了三個衍生註解來區分三層架構,但是並沒有實際的意義,僅僅是語義上的區分,不過再開發中推薦使用衍生註解,因為在未來的版本中可能會增加新的特性。
@Controller
:Web層@Service
:業務層@Reposotory
:Dao層
注入基本資料型別
使用@Value註解。
<context:component-scan base-package="com/spring/secondday" ></context :component-scan>
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/*
* @Component("userDao") 等價於 <bean id="userDao" class="com.spring.secondday.UserDaoImpl"></bean>
*/
@Component("userDao")
public class UserDaoImpl implements UserDao {
/* @Value設定值時不需要有setters方法。 */
@Value("HelloWorld")
private String name;
public void save() { }
public String toString() {
return "UserDaoImpl [name=" + name + "]";
}
}
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao ud = (UserDao)ac.getBean("userDao");
System.out.println(ud);
/*Console:
* UserDaoImpl [name=HelloWorld] */
}
}
注入引用資料型別
@Autowired
:使用xml的時候是按id
注入,但這個註解是按型別注入。也就是說如下程式碼@Autowired \n private UserDao ud;
會自動尋找UserDao的實現類來注入,如果能找到多個則會出錯。@Qualifier
:這個註解讓@Autowired
強行使用按id
注入的規則,如:@Autowired \n @Qualifier(value="userDaoMybatis") \n private UserDao ud;
@Resource
:把@Autowired
和@Qualifier
結合起來。如:@Resource(name="userDao") \n private UserDao ud;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/*
* @Component("userDao") 等價於 <bean id="userDao" class="com.spring.secondday.UserDaoImpl"></bean>
*/
@Component("userDao")
public class UserDaoImpl implements UserDao {
/* @Value設定值時不需要有setters方法。 */
@Value("HelloWorld")
private String name;
public void save() { }
public String toString() {
return "UserDaoImpl [name=" + name + "]";
}
}
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
@Component("userService")
public class UserServiceImpl implements UserService{
@Resource(name="userDao")
private UserDao ud;
public void save() { }
public String toString() {
return "UserServiceImpl [ud=" + ud + "]";
}
}
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService us = (UserService)ac.getBean("userService");
System.out.println(us);
/*Console:
* UserServiceImpl [ud=UserDaoImpl [name=HelloWorld]] */
}
}
配置bean的生命週期
@PostConstruct
:配置初始化時執行的方法PreDestroy
:配置工廠關閉時執行的方法
@PostConstruct
public void init(){
System.out.println("init");
}
@PreDestroy
public void destory() {
System.out.println("destory");
}
配置bean的作用域
@Scope(value="")
配置bean的作用範圍,屬性值和xml方式一致。
singleton
:預設的,Spring會採用單例模式建立這個物件。prototype
:多例模式。request
:應用在web專案中,Spring建立這個類以後,將這個類存入到request範圍中。session
:應用在web專案中,Spring建立這個類以後,將這個類存入到session範圍中。globalsession
:應用在web專案中,必須在porlet環境下使用。但是如果沒有這種環境,相當於session。