注解:代码里面特殊的标记,使用注解可以完成相关功能
注解写法:@注解名称(属性名、属性值)
@Required
用在set方法上,一旦用了这个注解,那么容器在初始化bean的时候必须要进行set,也就是说必须对这个值进行依赖注入。
编写Student.java
1 package com.example.spring; 2 import org.springframework.beans.factory.annotation.Required; 3 4 public class Student { 5 private String name; 6 7 @Required 8 public void setName(String name){ 9 this.name = name; 10 } 11 12 public void print(){ 13 System.out.println("name:"+name); 14 } 15 }
编写Beans.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xsi:schemaLocation="http://www.springframework.org/schema/beans 6 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 7 http://www.springframework.org/schema/context 8 http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 9 10 <context:annotation-config/> 11 12 <bean id="student" class="com.example.spring.Student" > 13 <property name="name" value="XiaoMing"></property> 14 </bean> 15 16 </beans>
编写Application.java
1 package com.example.spring; 2 3 import org.springframework.context.support.AbstractApplicationContext; 4 import org.springframework.context.support.ClassPathXmlApplicationContext; 5 6 public class Application { 7 public static void main(String[] args) { 8 //bean配置文件所在位置 D:\IdeaProjects\spring\src\Beans.xml 9 //使用AbstractApplicationContext容器 10 AbstractApplicationContext context = new ClassPathXmlApplicationContext("file:D:\IdeaProjects\spring\src\Beans.xml"); 11 //得到配置创建的对象 12 Student student = (Student) context.getBean("student"); 13 student.print(); 14 } 15 }
创建对象的注解有四个注解
- @Component :对那些比较中立的类进行注释
- @Controller :WEB层
- @Service :业务层
- @Repository :持久层
@Component
在类定义上面使用,表示用注解方式创建对象,相当于在配置文件中,<bean id="" class="">
编写User.java
1 package com.example.spring; 2 3 import org.springframework.stereotype.Component; 4 5 @Component(value = "user") //相当于beans.xml中的<bean id="user" class="com.example.spring.User"> 6 public class User { 7 public void print(){ 8 System.out.println("user pirnt."); 9 } 10 }
编写Beans.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xsi:schemaLocation="http://www.springframework.org/schema/beans 6 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 7 http://www.springframework.org/schema/context 8 http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 9 10 <!--开启注解扫描,到包里面扫描类、方法、属性上面是否有注解--> 11 <context:component-scan base-package="com.example.spring"></context:component-scan> 12 13 </beans>
编写Application.java
1 package com.example.spring; 2 3 import org.springframework.context.support.AbstractApplicationContext; 4 import org.springframework.context.support.ClassPathXmlApplicationContext; 5 6 public class Application { 7 public static void main(String[] args) { 8 //bean配置文件所在位置 D:\IdeaProjects\spring\src\Beans.xml 9 //使用AbstractApplicationContext容器 10 AbstractApplicationContext context = new ClassPathXmlApplicationContext("file:D:\IdeaProjects\spring\src\Beans.xml"); 11 //得到配置创建的对象 12 User user = (User) context.getBean("user"); 13 user.print(); 14 } 15 }
运行输出
user pirnt.
其他的注解创建对象方式类似
注入对象属性的注解:
- @Autowired
- @Resource
@Autowired
对象类型属性注入注解
编写UserDao.java
1 package com.example.spring; 2 3 import org.springframework.stereotype.Component; 4 5 //@Component 创建对象注释,相当于在配置文件中中的<bean id="userDao" class="com.example.spring.UserDao"> 6 @Component(value = "userDao") 7 public class UserDao { 8 public void print(){ 9 System.out.println("Dao print."); 10 } 11 }
编写UserService.java
1 package com.example.spring; 2 3 import org.springframework.beans.factory.annotation.Autowired; 4 import org.springframework.stereotype.Component; 5 6 //@Component 创建对象注释,相当于在配置文件中中的<bean id="userService" class="com.example.spring.UserService"> 7 @Component(value = "userService") 8 public class UserService { 9 //1、定义dao类型属性,在dao属性上面使用注解,完成对象注入 10 //@Autowired 相当于配置文件中的对象类型注入(如下) 11 // <bean id="userDao" class="com.example.spring.UserDao"></bean> 12 // <bean id="userService" class="com.example.spring.UserService" > 13 // <property name="userDao" ref="userDao"></property> 14 // </bean> 15 @Autowired 16 private UserDao userDao; 17 //2、使用注解方式时候不需要set方法 18 //public void setUserDao(UserDao userDao){ 19 // this.userDao = userDao; 20 //} 21 22 public void print(){ 23 System.out.println("Service print."); 24 userDao.print(); 25 } 26 }
编写Beans.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xsi:schemaLocation="http://www.springframework.org/schema/beans 6 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 7 http://www.springframework.org/schema/context 8 http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 9 10 <!--开启注解扫描,到包里面扫描类、方法、属性上面是否有注解--> 11 <context:component-scan base-package="com.example.spring"></context:component-scan> 12 13 14 </beans>
编写Application.java
1 package com.example.spring; 2 3 import org.springframework.context.support.AbstractApplicationContext; 4 import org.springframework.context.support.ClassPathXmlApplicationContext; 5 6 public class Application { 7 public static void main(String[] args) { 8 //bean配置文件所在位置 D:\IdeaProjects\spring\src\Beans.xml 9 //使用AbstractApplicationContext容器 10 AbstractApplicationContext context = new ClassPathXmlApplicationContext("file:D:\IdeaProjects\spring\src\Beans.xml"); 11 //得到配置创建的对象 12 UserService user = (UserService) context.getBean("userService"); 13 user.print(); 14 } 15 }
运行输出
Service print.
Dao print.
@Resource
@Autowired是通过类名来自动注入,和@Component(value = "userDao")中的value值无关,这时就引出了@Resource注解,@Resource(name="userDao"),就会查找@Component(value = "userDao")注解的类并注入。