注解介紹
- 代碼里的特殊標記群凶,使用注解可以完成功能
- 寫法:@注解名稱(屬性名稱=value)
- 注解使用在 類上面,方法上面,屬性上
- 作用:替代配置文件完成對象生成韵吨,屬性注入,但是注解并不能完全脫離配置文件
Spring注解開發(fā)準備
- applicationContext.xml中引入新的約束
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
</beans>
- 約束中開啟注解掃描
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<!--開啟注解掃描移宅,base-package中寫要掃描的包归粉,如果有多個包,用逗號隔開或者寫包的共同前綴-->
<!--掃描包里面的類漏峰、方法糠悼、屬性上是否有注解-->
<context:component-scan base-package="\"></context:component-scan>
</beans>
注解創(chuàng)建對象
import org.springframework.stereotype.Component;
@Component(value="person") //等于<bean id="user" class = "Person"/>
public class Person{
public void say(){
System.out.println("hi");
}
}
public class test {
public static void main(String args []){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Person person = (Person) context.getBean("person");
person.say();
}
}
創(chuàng)建對象一共有4個注解
- @Component
- @Controller:WEB層
- @Service : 業(yè)務層
- @Repository:持久層
目前這四個注解功能一樣
創(chuàng)建單實例對象:
@Component(value="person") //等于<bean id="user" class = "Person"/>
@Scope(value = "singleton") //prototype創(chuàng)建多實例
public class Person{
public void say(){
System.out.println("hi");
}
}
public class test {
public static void main(String args []){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Person person1 = (Person) context.getBean("person");
Person person2 = (Person) context.getBean("person");
System.out.println(person1==person2);
}
}
結果:image.png
注解注入屬性
- 注解注入對象
場景:Service中注入Dao對象
@Component("studentDao")
public class studentDao {
public void say(){
System.out.println("this is dao");
}
}
@Service("studentService")
public class StudentService {
//在SerVice中注入Dao對象
//創(chuàng)建Dao類型的屬性,在屬性上使用@Autowired實現(xiàn)對象注入(自動裝配)
@Autowired
private studentDao studentDao;
public void say2(){
System.out.println("this is Service");
studentDao.say();
}
}
其實更常用對象注入的注解是:@Resource(name=" ")
@Service("studentService")
public class StudentService {
//在SerVice中注入Dao對象
//創(chuàng)建Dao類型的屬性,在屬性上使用@Resource實現(xiàn)對象注入
@Resource(name = "studentDao")
private studentDao studentDao;
public void say2(){
System.out.println("this is Service");
studentDao.say();
}
}
測試:
public class test {
public static void main(String args []){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
StudentService studentService = (StudentService) context.getBean("studentService");
studentService.say2();
}
}
結果:image.png