UserConfig .java
可以完全代替xml配置文件
package com.bky.config;
import com.bky2.dao.Dao;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;
import java.util.Date;
/**
* Configuration 注解标识的类是一个配置类
*/
@Configuration
@ComponentScan("com.bky")
public class UserConfig {
@Bean
/**
* bean 注解用于方法上 加上这个注解 方法的返回值会装载到spring的容器里面
* 没有指定id 的时候 默认方法名称为方法的id
*/
// @Scope("prototype")
public Date getDate(){
return new Date();
}
}
UserDao .java
package com.bky.dao;
public interface UserDao {
void login();
}
UserDaoImpl .java
package com.bky.dao;
import org.springframework.stereotype.Repository;
@Repository
public class UserDaoImpl implements UserDao{
@Override
public void login() {
System.out.println("登录成功");
}
}
UserService .java
package com.bky.service;
public interface UserService {
void login();
}
UserServiceImpl .java
package com.bky.service;
import com.bky.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service("userServiceImpl01")
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public void login() {
userDao.login();
}
}
UserServiceImpl02 .java
package com.bky.service;
import com.bky.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service("userServiceImpl02")
public class UserServiceImpl02 implements UserService {
@Autowired
private UserDao userDao;
@Override
public void login() {
userDao.login();
}
}
UserServlet .java
package com.bky.servlet;
public interface UserServlet {
void login();
}
UserServletImpl .java
package com.bky.servlet;
import com.bky.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;
@Controller(value = "userServlet")
@Scope("prototype") //属性多例
public class UserServletImpl implements UserServlet{
//@Autowired 根据类型注入 只要在容器中找到相同类型的 就与之注入
// 不能单独使用 需要和Autowired一起使用
// @Qualifier("userServiceImpl")
@Resource(name = "userServiceImpl01")
// 根据容器中的唯一标识去注入 name属性不能省略
// @Resource(name = "userServiceImpl01")
// @Qualifier("userServiceImpl01")
// @Autowired
private UserService userService;
@Override
public void login() {
userService.login();
}
/**
* @Scope("prototype") 当作用范围为单例是 只要容器创建 对象就创建 容器销毁 对象就随之销毁
* 当作用范围是多例时 什么时候使用什么时候创建 调用结束 容器就销毁
*/
// 指定初始化的方法
@PostConstruct
public void postConstruct() {
System.out.println("初始化成功");
}
//指定销毁方法
@PreDestroy
public void preDestory() {
System.out.println("容器销毁成功");
}
}
UserTest02 .java
package com.bky.ui;
import com.bky.config.UserConfig;
import com.bky.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import java.util.Date;
public class UserTest05 {
public static void main(String[] args) {
//获取容器对象
ApplicationContext applicationContext
=new AnnotationConfigApplicationContext(UserConfig.class);
UserService userService = (UserService) applicationContext.getBean("userServiceImpl01");
System.out.println(userService);
// Date getDate = (Date) applicationContext.getBean("getDate");
// System.out.println(getDate);
}
}