注解:就是一个类,使用@
注解名称。实际开发中:使用注解取代 xml 配置文件。java
一、经常使用注解释义web
@componentspring
取代 <bean class="">
@Component("id")ide
取代 <bean id="" class="">
web开发,提供3个 @Component 注解衍生注解取代<bean class="">函数
@Repository(“名称”):dao层@Service(“名称”):service层测试
@Controller(“名称”):web层this
web 开发中其余经常使用注解日志
@Autowired:自动根据类型注入@Qualifier(“名称”):指定自动注入的id名称code
@Resource(“名称”)component
@ PostConstruct 自定义初始化
@ PreDestroy 自定义销毁
二、案例代码演示
接口和实现类
public interface UserService { void add(User user); } ========================================================================================= @Component public class UserServiceImpl implements UserService { @Override public void add(User user) { System.out.println("添加用户信息..."+user); } }
配置 bean.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.xsd"> <!-- 开启注解--> <context:annotation-config/> <!-- 注解的位置--> <context:component-scan base-package="com.example.demo"/> </beans>
测试函数
public class ServiceTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); UserService userService = context.getBean(UserServiceImpl.class); User user = new User(); user.setUsername("元始天尊"); user.setAge(999); user.setPassword("555"); userService.add(user); } }
控制台日志信息以下:添加用户信息...User{username='元始天尊', password='555', age=999}
三、重点:注解是如何取代 xml 中 bean 的配置
a、在类中声明@Component 至关于配置了 :
<bean class="com.example.demo.service.impl.UserServiceImpl"></bean>b、Spring默认状况下注解不生效,须要开启注解功能 :
<!-- 开启注解--> <context:annotation-config/> <!-- 注解的位置--> <context:component-scan base-package="com.example.demo"/>c、使用注解时 需注意 bean.xml 配置的约束文件,不然不会生效:
四、还可使用如下配置
@Component("userService") public class UserServiceImpl implements UserService { private String name; public void setName(String name) { this.name = name; } @Override public void add() { System.out.println("建立用户...." + name); } @Override public void add(User user) { System.out.println("添加用户信息..."+user); } }
public class ServiceTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); UserService userService = (UserService)context.getBean("userService"); User user = new User(); user.setUsername("元始天尊"); user.setAge(999); user.setPassword("555"); userService.add(user); } }
2 种运行的结果都是同样的。@Component("userService") 就是加上了 id ,就至关于在 Spring 容器中注入的时候有了惟一的 id 号码,因此在获取的时候能够经过 id 获取,即
UserService userService = (UserService)context.getBean("userService");。