自動ワイヤードはクラス名に基づいてどのように注入されますか?
@Autowired注解はSpringフレームワークでBeanを自動的に注入するための注釈であり、その中の1つの使用法はクラス名に基づいて注入することです。
@Autowired注解を使用する際、具体的なBean名が指定されない場合、Springは変数のタイプに基づいて自動配線を行います。同じタイプの複数のBeanがある場合、Springは変数名と同じBeanを優先してインジェクションします。変数名と同じBeanが見つからない場合は、同じタイプのBeanがインジェクションされます。
Here is an example:
以下は例です:
@Service
public class UserService {
@Autowired
private UserDao userDao;
}
@Repository
public class UserDao {
// ...
}
上記の例では、UserServiceクラスのuserDaoフィールドは@Autowired注釈を使用して自動的に配線されています。変数名がBean名と異なるため、Springは変数の型に基づいてインジェクションを行い、その結果、UserDaoタイプのBeanがuserDaoフィールドにインジェクションされます。
変数の型が同じで複数のBeanがある場合、SpringはどのBeanを注入すべきか判断できないため例外がスローされることに注意する必要があります。この場合、@Qualifierアノテーションを使用して特定のBean名を指定することができます。
@Service
public class UserService {
@Autowired
@Qualifier("userDaoImpl")
private UserDao userDao;
}
@Repository("userDaoImpl")
public class UserDaoImpl implements UserDao {
// ...
}
@Repository("userDaoDummy")
public class UserDaoDummy implements UserDao {
// ...
}
上記の例では、@Qualifierアノテーションを使用して、注入するBeanの名前が”userDaoImpl”であることを指定しました。これにより、UserDaoImpl型のBeanがuserDaoフィールドに注入されることが保証されます。